Java面试深度解析:32大核心问题解析

需积分: 9 2 下载量 189 浏览量 更新于2024-12-11 1 收藏 2KB TXT 举报
"Java经典面试32题涵盖了Java语言的核心概念、语法特性、集合框架、内存管理、异常处理以及设计模式等多个方面。" 在Java面试中,常常会遇到以下问题: 1. `final`, `finally`, `finalize`: `final`用于声明不可变对象或方法,`finally`确保代码块中的清理操作始终执行,`finalize`是对象被垃圾收集前调用的方法。 2. 匿名内部类:它可以没有名称,直接实例化,并且可以实现接口或继承类。 3. `extends`与`implements`: `extends`用于类的继承,而`implements`用于实现接口。 4. 静态嵌套类(Static Nested Class)与内部类(Inner Class):静态嵌套类不持有外部类的引用,而内部类则有。 5. `&`与`&&`:`&`是按位与运算符,`&&`是逻辑与运算符,后者在短路逻辑中只会在左侧表达式为真时计算右侧。 6. `HashMap`与`Hashtable`:两者都是散列表,但`Hashtable`是线程安全的,而`HashMap`不是。`Hashtable`不支持`null`键值对,而`HashMap`允许。 7. `Collection`与`Collections`:`Collection`是所有集合类型的父接口,`Collections`是操作集合的工具类,提供了各种静态方法。 8. `assert`关键字:用于在开发阶段进行断言检查,验证程序状态。 9. 垃圾回收(Garbage Collection, GC):Java自动进行内存管理,何时进行垃圾回收取决于JVM的策略。 10. `String str = new String("xyz");`:创建了两个对象,一个在常量池,一个在堆内存。 11. `String`与`Object`的关系:`String`是`Object`的子类。 12. `Math.round()`:四舍五入,`Math.round(11.5)`返回12,`Math.round(-11.5)`返回-11。 13. short变量自增:`s1 = s1 + 1`需要临时变量转换,可能导致编译错误;`s1 += 1`则是合法的自增操作。 14. `sleep()`与`wait()`:`sleep()`是线程暂停指定时间,`wait()`让当前线程等待其他线程的通知。 15. Java没有`goto`关键字。 16. `length()`与`length`:数组有`length`属性,字符串有`length()`方法。 17. `Overload`, `Override`, `Overloaded`:重载(Overload)是方法签名相同但参数列表不同,重写(Override)是子类覆盖父类方法。 18. `Set`的特性:无序、不允许重复元素。使用`equals()`比较Set对象时,比较的是元素及顺序。 19. `RuntimeException`与`Error`:`RuntimeException`是可捕获的运行时异常,`Error`是程序无法恢复的严重错误。 20. `List`, `Set`, `Map`与`Collection`:`List`, `Set`, `Map`是`Collection`接口的子接口。 21. `abstract class`与`interface`:抽象类可以有方法实现,接口只能声明方法。 22. 同时声明`abstract`、`static`、`native`、`synchronized`:这些修饰符不能同时使用在同一方法上。 23. 构造器是否可以重载(Override):构造器可以重载,但不构成重写(Override)关系。 24. `String`是否可变:`String`对象是不可变的,每次修改都会创建新对象。 25. `run()`与`start()`:`run()`直接执行线程体,`start()`启动线程并自动调用`run()`。 26. 构造器是否可以被重写(Override):构造器不能被重写,但可以被重载。 27. `equals()`与`==`:`equals()`比较对象内容,`==`比较对象引用。 28. `try{} finally{}`中的`return`:如果`return`在`finally`块内,那么`return`前的语句不会被执行,直接返回`finally`块的结果。 29. 单例模式的28种实现方式:包括懒汉式、饿汉式、双重检查锁定、静态内部类、枚举等实现。 30. `hashCode()`与`equals()`一致性:若两个对象相等(`equals()`返回`true`),它们的`hashCode()`应相同。 31. 构建字符串缓冲区:使用`StringBuilder`或`StringBuffer`在多线程环境中高效构建字符串,避免多次`String`对象的创建。 32. `switch`能否接受`byte`, `char`, `short`, `int`, `枚举类型`和`String`:Java 7之后,`switch`可以接受`String`,但不支持`long`。 这些问题涵盖了Java的基础到高级特性,是面试者必须掌握的关键知识点。