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 常用的方法有哪些?(必会)
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串 ,返回一个分割后的字符串数组。左闭右开。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字母。
- substring():截取字符串。
- equals():字符串比较 。
- 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包下用于操作文件和目录的工具类。
- Files. exists():检测文件路径是否存在。
- Files. createFile():创建文件。
- Files. createDirectory():创建文件夹。
- Files. delete():删除一个文件或目录。
- Files. copy():复制文件。
- Files. move():移动文件。
- Files. size():查看文件个数。
- Files. read():读取文件
- Files.write():写入文件