Java面试八股文<待完成>
发布于2024-01-30 00:06:41,更新于2024-09-07 16:39:38,标签:java 文章会持续修订,转载请注明来源地址:https://meethigher.top/blog一、Java基础
1 什么是Java
Java是一种面向对象的编程语言,由Sun公司开发,后被Oracle公司收购。
Java具有跨平台的特性,可以在不同的操作系统上运行。
Java语言具有良好的可读性、可移植性、可扩展性和可靠性等特点。
2 Java中的数据类型有哪些
Java中的数据类型包括基本数据类型和引用数据类型。
基本数据类型
- byte:1字节
- short:2字节
- int:4字节
- long:8字节
- float:4字节
- double:8字节
- char:2字节
- boolean:1字节
引用数据类型
- 类:Object子类,包含基本数据类型的包装类
- 接口
- 数组
- 枚举
- 注解
基本数据类型是存储实际数值的简单类型,而引用数据类型是用于处理对象的引用,通过引用可以访问对象的内容。
3 自动装箱与自动拆箱
基本数据类型和包装数据类型区别
- 包装数据类型属于引用类型,指向具体的地址或者为null
- 基本数据类型必须有值,不初始化时一般默认值为0
基本数据类型 | 包装数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
自动装箱与自动拆箱是Java5中新增的特性。
自动装箱指的是将基本数据类型自动转换为对应的包装数据类型。自动拆箱指的是将包装数据类型转换为对应的基本数据类型。
1 | Integer a = 1;//自动装箱,相当于Integer a=new Integer(1) |
4 什么是泛型
泛型是Java5中新增的特性。可以使代码更加灵活和安全,通过使用泛型,可以在编译时检查类型安全,避免在运行时出现类型转换错误。
泛型的使用场景有
泛型类(Generic Class):
- 使用泛型的类可以有一个或多个类型参数,这些参数用尖括号
<T>
括起来。 - 类中的字段、方法参数和返回类型可以使用这些类型参数,使得类可以操作任意类型的数据。
1
2
3
4
5
6
7
8
9
10
11public class Box<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}- 使用泛型的类可以有一个或多个类型参数,这些参数用尖括号
泛型方法(Generic Method):
- 泛型方法是在调用时指定类型参数的方法。
- 方法中的类型参数可以与类中的不同,使得方法可以独立于类使用泛型。
1
2
3
4public <T> T exampleMethod(T input) {
// 方法逻辑...
return input;
}泛型接口(Generic Interface):
- 泛型接口定义了一个或多个类型参数,使得实现该接口的类可以支持不同类型的数据。
1
2
3
4public interface List<T> {
void add(T element);
T get(int index);
}通配符(Wildcard):
- 使用通配符可以在不知道具体类型的情况下操作泛型对象。
<?>
表示未知类型,<? extends T>
表示类型的上界,<? super T>
表示类型的下界。
1
2
3public void processList(List<?> list) {
// 处理泛型列表的逻辑...
}类型擦除(Type Erasure):
- Java的泛型是通过类型擦除实现的,即在编译时擦除类型信息,使得泛型在运行时不再存在。
- 运行时使用原始类型(raw type)来处理泛型对象。
5 什么是反射
反射是Java中的一种机制,可以在程序运行时动态地获取类的信息,并调用类中的方法和属性。反射可以让程序在运行时根据需要动态地创建对象、调用方法、获取属性等等。
1 | Class<?> clazz = Class.forName("com.example.User"); |
6 什么是异常
异常是Java中的一种错误机制,用于处理程序中出现的异常情况。
Java中的异常分为受检查异常和不受检查异常(也称运行时异常)。
受检查异常需要在方法签名中声明,调用方必须进行处理或者抛出异常。
不受检查异常不需要在方法签名中声明,可以在任何地方抛出。
7 什么是集合
集合是Java中的一种数据结构,用于存储一组对象。Java中的集合分为List、Set和Map三种类型。
List用于存储有序的元素,可以重复。
Set用于存储无序的元素,不允许重复。
Map用于存储键值对,键不允许重复。
8 什么是序列化
序列化是将对象的状态保存到文件或者网络中,以便后续恢复。
Java中的序列化使用ObjectOutputStream进行对象序列化,使用ObjectInputStream进行对象反序列化。
序列化可以用于数据持久化、远程通信等场景。
1 | import java.io.*; |
9 什么是多线程
多线程是指在一个进程中同时运行多个线程,每个线程可以独立地执行不同的任务。
Java中的多线程使用Thread类和Runnable接口实现。
多线程可以提高程序的并发性和效率,但也会带来线程安全问题。最典型的比如数据不一致:多个线程对共享对象进行读写操作,但由于缺乏同步机制,数据会存在不一致的问题。
10 什么是 synchronized?
synchronized是Java中的一种同步机制,用于保证多个线程对共享资源访问的可见性和互斥性。