Java基础--经典问题--知识点

1.JDK 和 JRE 的区别

JDK包含JRE。JDK 用于开发 ,JRE 用于运行。

JDK (Java Development Kit)是Java开发工具包 ,用于开发 和编译java程序 。它包含了编译器 、调试器 等开发工具,以及Java的类库。

JRE (ava Runtime Environment)是Java运行时环境 ,用于运行已编译的 Java程序 。它包含Java虚拟机(JVM) 和运行时类库。

2."=="和equals()方法的区别和联系

"=="是运算符,而"equals()"是方法。

对于基本数据类型,"=="比较的是它们的值是否相等,而equals()不能用于基本数据类型的比较。

对于引用数据类型 ,"=="比较的是它们在内存中 的地址 是否相等,而"equals()"方法比较的是对象的内容是否相等。

在类中,如果equals()方法没有重写 ,默认 情况下equals()方法与"=="运算符是相同的 。重写 equals()方法可以实现 自定义 的比较逻辑。

Interger在常量池中的范围-128~127

3.hashcode()和 equals() 的关系

在Java中,hashCode()和equals()方法用于判断对象是否相等。

1.如果两个对象通过 equals() 比较 相等,它们的hashCode() 必须相同;但hashCode()相同,不保证对象一定相等(可能哈希冲突)。

2.hashCode()通常比equals()高效。

3.重写 equals() 时,也应重写 **hashCode()**以保持一致性。

这两个方法的正确实现对集合操作很重要。

4.final 在java 中的作用

final关键字在java中,可以优化代码执行效率。

final关键字可以修饰变量、方法和类。

修饰变量时,该变量是只能被赋值一次 的常量。

修饰方法时,该方法不能被子类重写。

修饰类时,该类不能被继承。

5.Math.round(-1.5)的结果是?

Math.round(-1.5)结果是-1,该方法对小数 四舍五入,-1.5四舍五入之后是-1。

6.Sring属于基本数据类型吗?Java中数据类型有哪些?

String不属于基本数据类型,它是对象。

数据类型分为 基本数据类型和引用数据类型。

1.基本 数据类型:分为四类八种。

整型 :byte (1 字节,-27 ~ 27-1)、short(2字节,-215 ~ 215-1)、

int (4 字节,-231 ~ 231-1)、long (8字节,-263 ~ 263-1)

浮点型 :float (4 字节,-2128 ~ 2128)、double (8字节,-21024 ~ 21024)

布尔型 :boolean (1字节)

字符型 :char (2字节)

2.引用 数据类型:(类 、数组 、接口 、枚举)

7.Java 中操作字符串都有哪些类?它们之间有什么区别?

String\StringBuffer\StringBuilder 三者之间的区别 (必会)

操作字符串 的类 有 String 、StringBuilder 和StringBuffer。

String是不可变 的,每次修改 都会生成 新的String对象(指针也会指向它) ,适合不经常修改的情况。

StringBuilder和StringBuffer是可变 的,可以在原有对象的基础上操作。

StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以StringBuilder 适用于单线程 环境,而StringBuffer 适用于多线程环境。

8. String str="i" 和 String str=new String("i") 一样吗?区别?

直接为String对象赋值和创建一个String对象的区别:

不一样,因为内存的分配方式不一样。

String str="i"的方式,Java 虚拟机会将其分配到常量池中;如果池中已存在则返回引用,否则创建新引用。

而 String str=new String("i") 则会被分到堆内存中。不论池中是否已存在相同字符串。

(首先在方法区加载这个类,然后再堆内存中创建对象,进行属性的初始化,不管池中是否存在相同的对象都会创建。)

对象创建流程:p对象(p引用指向的这个对象)

流程步骤:堆里放着的是对象

栈里的p就是对象的引用/对象名(好比一个人有多个名字,栈---代名词)

Person p = new Person("小倩",20);:

第一步:先在方法区加载Person类

第二步:new: 先在 堆 里面开辟带有地址的一个空间

第三步:先对属性默认初始化 看Person类里有几个属性(age 0,name null)

然后显示的初始化,Person类里有对age赋值(age 90,name null)引用数据类型不能直接存放在栈中,基本数据类型可以。

第四步:Person("小倩",20) 对构造器(对 对象的初始化,而不是创建对象)进行处理

①把构造器里的形参与实参对应,把小倩给n,最后给name属性。

此时,在方法区的常量池里开辟一个空间有一个地址,小倩就放在这里。

与此同时堆里面对应的 属性地址 里的name属性 的属性值 就有一个对应的地址,此时这个地址就指向它。

就把name的null 换成小倩了。

同比:

把20传给a,a赋给age,此时age就换成了20。

第五步:new Person("小倩",20)加载完成后

在栈里开辟空间时 空间里放着p

把堆里的地址返回给p,p就是对象的引用

p就指向了堆里的对应的空间

9.如何将字符串反转?

使用StringBuilder 或者StringBuffer 的**reverse()**方法。

10. string 常用的方法有哪些?(必会)

  1. indexOf():返回指定字符的索引。
  2. charAt():返回指定索引处的字符。
  3. replace():字符串替换。
  4. trim():去除字符串两端空白。
  5. split():分割字符串 ,返回一个分割后的字符串数组。左闭右开。
  6. getBytes():返回字符串的 byte 类型数组。
  7. length():返回字符串长度。
  8. toLowerCase():将字符串转成小写字母。
  9. toUpperCase():将字符串转成大写字母。
  10. substring():截取字符串。
  11. equals():字符串比较 。
  12. concat():连接字符串。

11.普通类和抽象类有哪些区别?

普通类可以(实例化)创建对象 。而抽象类只能被继承。

普通类不能包含抽象方法,抽象类有抽象和 非抽象的方法。

子类继承 普通类时,可以不需要实现 父类的方法。而继承抽象类时必须实现父类的抽象方法。

12.抽象类能使用 final 修饰吗?

final 不能修饰抽象类,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,编辑器也会提示错误信息。

13.接口和抽象类有什么区别?

接口、抽象类 都是用来实现多态 和 制定规范的。

区别有:

一个类 只能继承一个 抽象类 ,但可以实现多个 接口 。

抽象类 可以有构造方法、 抽象 和非抽象的方法, 但接口 只能有抽象方法。

抽象类中的方法 可以有任意修饰符,而 接口中的方法默认使用public修饰。

14.java中IO流分为几种?

按功能 来分:输入流 (input)、输出流(output)。

按类型 来分:字节流 和字符流。

字节流和字符流的区别是:

字节流按 8 位传输 以字节为单位输入输出数据,

字符流按 16 位 传输以字符为单位输入输出数据。

15.BIO、NIO、AIO 有什么区别?

  • BIO:Block IO 同步阻塞式IO,就是我们平常使用的传统 IO,

它的特点是模式简单 使用方便 ,并发处理能力 低。

  • NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,

客户端 和服务器端 通过 Channel(通道 )通讯 ,实现了多路复用。

  • AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,

实现了异步非堵塞 IO ,

异步 IO 的操作 基于事件 和回调机制。

16.Files的常用方法有哪些?

Files类是 java.nio.file包下用于操作文件 和目录 的工具类。

  1. Files. exists():检测文件路径是否存在。
  2. Files. createFile():创建文件。
  3. Files. createDirectory():创建文件夹。
  4. Files. delete():删除一个文件或目录。
  5. Files. copy():复制文件。
  6. Files. move():移动文件。
  7. Files. size():查看文件个数。
  8. Files. read():读取文件
  9. Files.write():写入文件
相关推荐
白帽攻防录4 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛4 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148115 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya6 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的6 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务6 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
打工仔折腾 AI8 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
MATLAB代码顾问8 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab
Want5958 小时前
Python跳动的爱心②
开发语言·python·数学建模
小羊没烦恼!9 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html