JAVA面试基础题
1.JDK和JRE的区别是什么?
JDK:Java Development Kit,Java开发工具包,包含了Java开发所需的各种工具和库,如编译器(javac)、Java虚拟机(JVM)、Java API类库、调试器等。主要用于Java程序的开发。
JRE:Java Runtime Environment,Java运行时环境,包含了Java应用程序运行所需的最小环境,包括JVM和Java类库。主要用于运行已编译的Java程序。
2.==和equals的区别是什么?
==:比较的是两个对象的引用是否相等,即是否指向同一个内存地址。对于基本类型,比较的是值是否相等。
equals():是Object类的方法,默认比较的是两个对象的引用是否相等。但很多类(如String、Integer等)重写了该方法,用于比较对象的内容是否相等。
3.final关键字在Java中有什么作用?
修饰类:表示该类不能被继承。
修饰方法:表示该方法不能被重写。
修饰变量:表示该变量只能被赋值一次,赋值后其值不能被改变。对于基本类型,表示其值不可变;对于引用类型,表示其引用不可变,但对象的内容可以修改。
4.String、StringBuffer和StringBuilder的区别是什么?
String:不可变类,每次对String进行操作都会生成新的String对象,适用于字符串内容不经常变化的场景。
StringBuffer:可变类,线程安全,适用于多线程环境下字符串内容频繁变化的场景。
StringBuilder:可变类,非线程安全,性能比StringBuffer高,适用于单线程环境下字符串内容频繁变化的场景。
5.Java中的异常体系是怎样的?
Java中的异常分为两大类:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常:继承自Exception类(不包括RuntimeException及其子类),必须在方法声明中显式抛出或在方法体内捕获处理。
非受检异常:包括RuntimeException及其子类和Error类,不需要在方法声明中显式抛出或在方法体内捕获处理。
6.抽象类和接口有什么区别?
抽象类:可以包含抽象方法和具体方法,可以有构造方法,可以定义成员变量,一个类只能继承一个抽象类。
接口:在JDK 1.8之前只能包含抽象方法,不能有构造方法,只能定义常量,一个类可以实现多个接口。JDK 1.8之后,接口可以包含默认方法和静态方法。
7.重载(Overload)和重写(Override)的区别是什么?
重载:在同一个类中,方法名相同,参数列表不同(参数类型、个数、顺序不同),与返回值和访问修饰符无关。
重写:子类继承父类后,方法名、参数列表、返回值类型(除基本类型外,子类的返回值类型可以小于或等于父类的返回值类型)和异常类型必须与父类相同,访问修饰符不能比父类更严格。
8.Java中的访问修饰符有哪些?它们的作用范围是什么?
public:对所有类可见。
protected:对同一包内的类和所有子类可见。
default(无修饰符):对同一包内的类可见。
private:只对当前类可见。