Java 基础面试

1 JDK 和 JRE 有什么区别?
   DK(Java Development Kit)是Java开发工具包的缩写,它包含了Java编译器(javac)、Java虚拟机(JVM)和其他开发工具。JDK提供了开发Java应用程序所需的所有工具和库。


JRE(Java Runtime Environment)是Java运行时环境的缩写,它包含了Java虚拟机(JVM)、类库和其他支持文件。JRE只用于运行Java程序,而不包含开发工具。

简而言之,JDK包含了JRE,同时还包含了用于开发Java程序的编译器和其他工具

2 == 和 equals 的区别是什么?
 "=="是比较运算符,用于比较两个变量的值是否相等。对于基本数据类型,比较的是它们的值;对于引用类型,比较的是它们在内存中的地址。
"equals"是Object类中定义的方法,用于判断两个对象是否相等。默认情况下,equals方法和"=="运算符功能相同,比较的是两个对象的地址。但是,可以在类中重写equals方法,根据需要自定义对象的相等条件。

3 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
  不一定。hashCode是用于获取对象的哈希码(散列码),equals用于判断两个对象是否相等。如果两个对象的hashCode相同,那么它们在散列表中的位置可能相同,但并不意味着它们的内容相等。因此,两个对象的hashCode相同,并不一定意味着equals方法返回true。


4 final 在 java 中有什么作用?
当应用于变量时,表示该变量的值不能被修改(即常量)。
当应用于方法时,表示该方法不能被子类重写。
当应用于类时,表示该类不能被继承。

5 java 中的 Math.round(-1.5) 等于多少?
Math.round(-1.5) 的结果是 -1。Math.round() 方法用于对浮点数进行四舍五入

6 String 属于基础的数据类型吗?

String不属于基础的数据类型,它是Java中的一个类。但是,由于String在Java中使用非常广泛,因此在某些情况下可以将其看作基础的数据类型。

7 java 中操作字符串都有哪些类?它们之间有什么区别?
String:用于存储和操作字符串,是不可变的。
StringBuilder:用于高效地拼接和修改字符串,是可变的。
StringBuffer:与StringBuilder功能类似,但是线程安全,适用于多线程环境
String类是不可变的,每次对字符串进行修改都会创建一个新的字符串对象;StringBuilder和StringBuffer是可变的,可以直接在原来的对象上进行修改。

8 String str="i"与 String str=new String(“i”)一样吗?
String str = "i"" 是使用字符串字面量创建一个String对象,会在字符串常量池中查找是否存在相同内容的字符串,如果存在则直接引用,如果不存在则创建新的String对象。
String str = new String("i")" 是使用new关键字创建一个新的String对象,不会在字符串常量池中查找,而是在堆内存中创建一个新的String对象。

9 如何将字符串反转?

反转字符串的一种常见方法是使用StringBuilder或StringBuffer的reverse()方法,示例代码如下:
java
String str = "Hello World";
StringBuilder sb = new StringBuilder(str);
String reversedStr = sb.reverse().toString();
System.out.println(reversedStr);  // 输出:"dlroW olleH"

10 String 类的常用方法都有那些?

length():返回字符串的长度。
charAt(int index):返回指定位置的字符。
substring(int beginIndex, int endIndex):返回指定范围内的子字符串。
equals(Object obj):判断字符串与指定对象是否相等。
contains(CharSequence sequence):判断字符串是否包含指定的字符序列。
indexOf(String str):返回指定子字符串在字符串中首次出现的位置。
toUpperCase():将字符串转换为大写。
toLowerCase():将字符串转换为小写。
trim():去除字符串两端的空白字符。


11 抽象类必须要有抽象方法吗?
抽象类不一定要有抽象方法。抽象类是不能被实例化的,它存在的主要目的是为了被子类继承和实现。抽象方法是一种没有方法体的方法声明,只有方法签名,需要子类去实现

12 普通类和抽象类有哪些区别?
普通类可以直接实例化和使用,而抽象类不能直接实例化,只能被子类继承和实现。抽象类可以包含普通方法和成员变量,而接口只能包含常量和抽象方法。一个类只能继承一个普通类,但可以实现多个接口。

13抽象类能使用 final 修饰吗?
抽象类可以使用final修饰,但是有一定的限制。如果一个抽象类被final修饰,那么该类不能被继承。但是,抽象类的方法可以继续被子类实现和重写,即final关键字只对类有效,不影响方法的继承和重写

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

抽象类可以有构造方法,而接口不能有构造方法。
类只能继承一个抽象类,但是可以实现多个接口。
抽象类可以包含普通方法的实现,而接口只能包含抽象方法和默认方法(Java 8及以后版本还支持静态方法)。
接口中的字段默认是常量,而抽象类可以有普通成员变量。
接口中的方法默认是public修饰的,而抽象类可以有不同的访问修饰符

15 java 中 IO 流分为几种?

字节流(Byte Stream):用于读写字节数据,如InputStream、OutputStream等。
字符流(Character Stream):用于读写字符数据,如Reader、Writer等。
字节缓冲流(Buffered Stream):对字节流或字符流进行缓冲处理,提高读写效率。
对象流(Object Stream):用于序列化和反序列化对象,如ObjectInputStream、ObjectOutputStream等。

16 BIO、NIO、AIO 有什么区别?
BIO(Blocking IO)阻塞式IO:在IO操作时,当前线程会被阻塞,直到IO操作完成。每个连接需要独立的线程来处理,适用于连接数较小的情况。
NIO(Non-blocking IO)非阻塞式IO:使用事件驱动模型,通过Selector监听多个通道的事件,实现单线程处理多个连接。适用于连接数较多但每个连接处理时间较短的情况。
AIO(Asynchronous IO)异步IO:在IO操作时,当前线程不会被阻塞,可以继续处理其他任务。IO操作完成后,系统会通知应用程序进行处理。适用于连接数较多且每个连接处理时间较长的情况。

17 Files的常用方法都有哪些?
readAllBytes(Path path):读取文件的所有字节。
write(Path path, byte[] bytes):将字节数组写入文件。
copy(Path source, Path target, CopyOption... options):复制文件或目录。
delete(Path path):删除文件或目录。
exists(Path path):判断文件或目录是否存在。
isDirectory(Path path):判断是否为目录。
isRegularFile(Path path):判断是否为普通文件。
move(Path source, Path target, CopyOption... options):移动文件或目录。
newBufferedReader(Path path):创建一个BufferedReader以读取文件。
newBufferedWriter(Path path, OpenOption... options):创建一个BufferedWriter以写入文件
 

你可能感兴趣的:(JAVA面试题,java)