Java中的静态变量和实例变量有何区别?
答案:
静态变量(static variable)属于类,每个类只有一个静态变量的拷贝,无论这个类的实例被实例化多少次。而实例变量(instance variable)属于对象,每个对象都有自己的实例变量的一份拷贝。
什么是Java中的多态(Polymorphism)?
答案:
多态是面向对象编程中的一个重要概念,它允许以统一的接口来访问不同类的对象。在Java中,多态可以通过方法重写和方法重载来实现。
什么是Java中的泛型(Generics)?
答案:
泛型是Java中的一种参数化类型的机制,它允许在编译时指定数据类型。在Java中,泛型可以应用于类、接口和方法,提高了编程的安全性和可读性。
Java中的HashMap和Hashtable有何区别?
答案:
HashMap和Hashtable都实现了Map接口,但它们之间有几个重要的区别。HashMap允许key和value为null,是非线程安全的;而Hashtable不允许key和value为null,是线程安全的。
Java中的接口(Interface)和抽象类(Abstract Class)有何区别?
答案:
接口是一种抽象的数据类型,它只包含常量和抽象方法的定义,不包含成员变量。抽象类是一种包含抽象方法的类,可以包含成员变量和非抽象方法的定义。
什么是Java中的NIO(New I/O)?
答案:
Java NIO是Java 1.4引入的一套新的I/O库,它提供了更高效的I/O操作方式,并引入了通道(Channel)和缓冲区(Buffer)等新的概念。
Java中的算法复杂度有哪些,分别解释一下?
答案:
常见的算法复杂度包括O(1)、O(logn)、O(n)、O(nlogn)、O(n²)等。它们表示了算法的时间复杂度随输入规模的增长情况,是评价算法效率的重要指标。
什么是Java中的注解(Annotation)?
答案:
注解是一种元数据(Metadata)的方式,可以用来在类、方法、字段等元素上添加标记。在Java中,注解可以用于编写更干净、更直观的代码,以及为程序提供更多的信息。
Java中的序列化和反序列化有何作用?
答案:
序列化用于将对象转换为字节流,可以用于对象的持久化、跨网络传输等场景。反序列化则是将字节流转换为对象,恢复对象的过程。
什么是Java中的线程安全(Thread Safety)?
答案:
线程安全是指多个线程访问同一资源时不会出现数据不一致或产生不确定结果的情况。在Java中,可以通过同步(Synchronization)和锁(Lock)来实现线程安全。
什么是Java中的字符串不可变性(String immutability)?它有什么作用?
答案:
在 Java 中,String 对象一旦被创建,其值就无法被修改,即字符串是不可变的。这种设计有利于线程安全和安全共享对象。另外,字符串不可变性也使得字符串可以被缓存、作为常量池中的对象,从而提高性能。
Java中的Singleton模式是什么?请举例说明其实现方式。
答案:
Singleton 模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供全局访问点。在 Java 中,通过私有构造函数和静态方法获取实例是最常见的 Singleton 模式实现方式,如下所示:
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
什么是Java中的装箱(Boxing)和拆箱(Unboxing)?
答案:
装箱是将基本数据类型转换为对应的包装类类型的过程,拆箱是将包装类类型转换为对应的基本数据类型的过程。Java 中的自动装箱和拆箱可以让基本数据类型和对应的包装类类型之间相互转换更加方便。
Java中的方法重写和方法重载有什么区别?
答案:
方法重写(Override)指子类重新定义了父类中的方法,方法名、返回类型和参数列表必须相同;方法重载(Overload)指在同一个类中定义了多个同名方法,它们的参数列表不同。重写是运行时多态的表现,而重载是编译时多态的表现。
什么是Java中的异常链(Exception Chaining)?
答案:
异常链是指在捕获到异常后,通过将原异常信息传递给新异常,从而建立异常之间的关联。在 Java 中,可以使用构造函数传递原异常的方式来创建一个新的异常,并在新异常中保存原始异常的信息。
Java中的延迟初始化(Lazy Initialization)是什么?
答案:
延迟初始化是一种性能优化技术,它延迟对象的初始化或加载,直到真正需要使用对象时才执行初始化操作。在 Java 中,可以通过双重检查加锁(Double-Checked Locking)或静态内部类等方式来实现延迟初始化。
什么是Java中的弱引用(Weak Reference)和软引用(Soft Reference)?
答案:
在 Java 中,弱引用和软引用是用来描述对象生命周期的概念。弱引用表示被弱引用关联的对象只能生存到下一次垃圾回收之前,而软引用则是指在系统将要发生内存溢出之前,将软引用关联的对象回收。
Java中的位运算符有哪些,分别是什么?
答案:
Java 中的位运算符包括按位与(&)、按位或(|)、按位取反(~)、按位异或(^)和左移(<<)、右移(>>)、无符号右移(>>>)等。这些运算符可以用于对二进制位进行操作。
什么是Java中的AOP(Aspect-Oriented Programming)?
答案:
AOP 是一种编程范式,用于将应用的横切关注点(cross-cutting concerns)从核心业务逻辑中分离出来,以提高代码的模块化性和可维护性。在 Java 中,可以使用AspectJ等框架来实现AOP。
什么是Java中的JVM(Java Virtual Machine)?
答案:
JVM 是 Java 虚拟机的缩写,是 Java 程序的运行环境。它负责将 Java 字节码解释成机器码并执行,提供垃圾回收、即时编译等功能,实现了“一次编写,到处运行”的特性。