【Java程序员面试32问详解】 1. **final, finally, finalize的区别** - `final`:修饰符,用于标记类、方法或变量,表示不可变性或终结性。类被`final`修饰则不能有子类,方法被`final`修饰不能被重写,变量被`final`修饰后其值不能改变。 - `finally`:异常处理的关键字,无论是否发生异常,`finally`块中的代码都会执行,通常用于释放资源或完成必要清理。 - `finalize`:是`Object`类的一个方法,用于在垃圾收集器回收对象前进行清理工作。但通常不建议直接使用,因为其执行时机不确定且效率较低。 2. **Anonymous Inner Class (匿名内部类)** - 可以继承其他类,但只能继承一个非`final`类。 - 可以实现一个或多个接口,这是匿名内部类常用的功能,常用于快速实现简单接口的回调。 3. **Static Nested Class 和 Inner Class** - Static Nested Class(静态嵌套类)是静态成员类,可以独立于外部类实例存在,不持有对外部类的引用,可以直接通过类名访问。 - Inner Class(内部类)是非静态成员类,每个内部类实例都与外部类实例关联,需要外部类实例才能创建。 4. **& 和 && 的区别** - `&`:按位与运算符,用于对二进制位进行逐位与运算。在逻辑表达式中,`&`运算符始终会评估两边的操作数。 - `&&`:逻辑与运算符,只有当第一个操作数为真时,才会评估第二个操作数,用于短路逻辑判断。 5. **HashMap 和 Hashtable 的区别** - `HashMap`是非同步的,而`Hashtable`是同步的,所以`HashMap`在多线程环境下可能不安全。 - `HashMap`允许`null`键和值,而`Hashtable`不允许。 - `HashMap`从Java 1.2引入,性能优化更好。 6. **Collection 和 Collections的区别** - `Collection`是所有集合框架的顶级接口,代表单列集合,如List、Set。 - `Collections`是针对集合类的一个工具类,提供了大量静态方法,用于对集合进行操作,如排序、查找、转换等。 7. **assert的使用** - `assert`用于断言,用于在开发阶段检查程序状态,生产环境中默认关闭,可开启。 8. **GC(Garbage Collection)** - GC是Java的自动内存管理机制,负责回收不再使用的对象所占用的内存空间,防止内存泄漏。 9. **String s = new String("xyz"); 创建了几个String Object?** - 创建了两个对象:一个在常量池,一个在堆内存。"xyz"在常量池,`new String("xyz")`在堆内存。 10. **Math.round(11.5)等于多少? Math.round(-11.5)等于多少?** - `Math.round(11.5)`等于12,`Math.round(-11.5)`等于-11,`round()`方法四舍五入到最接近的整数。 11. **short s1 = 1; s1 = s1 + 1; 与 short s1 = 1; s1 += 1;的区别** - 第一种情况会报编译错误,因为`s1 + 1`的结果是`int`,无法赋值回`s1`。 - 第二种情况`s1 += 1`是合法的,因为Java会自动拆箱、装箱以及类型转换。 12. **sleep() 和 wait()的区别** - `sleep()`使当前线程暂停指定时间,不会释放锁。 - `wait()`使当前线程等待,释放对象锁,等待其他线程唤醒。 13. **Java中有goto吗?** - 不,Java中没有`goto`关键字,它是其他一些语言中的跳转语句,但Java设计时未包含。 14. **数组是否有length()这个方法? String是否有length()这个方法?** - 数组没有`length()`方法,但有`length`属性可以获取长度。 - `String`类有`length()`方法,用于获取字符串长度。 15. **Overload和Override的区别** - Overload(重载)是指在同一个类中,方法名相同但参数列表不同的方法。 - Override(重写)是指子类重写父类中具有相同方法名、相同参数列表的方法。 16. **Set里的元素不能重复,如何区分重复与否? 使用==还是equals()?** - Set通过`equals()`方法判断元素是否重复,`==`用于判断对象引用是否相同,而`equals()`用于判断对象内容是否相等。 17. **常见的runtime exception** - `NullPointerException`:尝试访问空对象时抛出。 - `ArrayIndexOutOfBoundsException`:数组索引越界。 - `ArithmeticException`:数学运算异常,如除以零。 18. **error和exception的区别** - Error:严重问题,如系统资源耗尽,一般程序无法恢复,JVM可能会终止。 - Exception:程序运行时可预见的异常,可以通过捕获并处理。 19. **List, Set, Map是否继承自Collection接口?** - List和Set继承自Collection接口,Map不是,它继承自Object。 20. **abstract class 和 interface的区别** - 抽象类:可以包含抽象方法和具体方法,一个类最多只能继承一个抽象类。 - 接口:只能包含抽象方法和常量,一个类可以实现多个接口。 21. **abstract的方法能否同时是static, native, synchronized?** - 不能,`abstract`与`static`矛盾,`abstract`表示需要实现,`static`表示无需实例化。 - `abstract`与`native`也矛盾,`abstract`表示需要实现,`native`表示由C/C++实现。 - `abstract`与`synchronized`可以结合,但意义不大,因为`abstract`方法通常不需要同步。 22. **接口能否继承接口? 抽象类能否实现(implements)接口? 抽象类能否继承实体类(concrete class)?** - 接口可以继承接口。 - 抽象类可以实现接口。 - 抽象类可以继承实体类。 23. **启动线程是用run()还是start()?** - 用`start()`,它会调用`run()`方法,创建新线程执行。 24. **构造器Constructor能否被override?** - 构造器不能被覆盖,但可以重载。 25. **是否可以继承String类?** - 不可以,`String`类被声明为`final`,不能有子类。 26. **一个线程进入一个对象的synchronized方法后,其他线程能否进入此对象的其他方法?** - 如果其他方法也用`synchronized`修饰,且同步锁是同一个对象,那么其他线程会被阻塞,直到该线程退出同步方法。 27. **try{}里有一个return语句,finally{}里的code是否会执行?何时执行?** - `finally`块中的代码总是会被执行,无论是否有`return`语句。`finally`中的代码会在`return`语句执行前执行。 28. **最有效率的方法计算2乘以8等于几?** - 直接返回16,因为2乘以8是基本的算术运算。 29. **两个对象值相同(x.equals(y)==true),但可有不同的hash code,这句话对不对?** - 不对,根据`equals()`方法的约定,如果两个对象相等(`equals()`返回`true`),它们的`hashCode()`应该相同。 30. **对象作为参数传递时,是值传递还是引用传递?** - 对象参数实际上是引用的复制,修改对象属性会改变原对象,但不能改变对象引用本身。 31. **switch能否作用在byte上,能否作用在long上,能否作用在String上?** - 在Java 7及以前,`switch`不支持`long`和`String`。从Java 7开始,`switch`支持`String`,但仍然不支持`long`。 32. **编写Singleton模式** - 单例模式确保一个类只有一个实例,并提供全局访问点。一种常见的实现方式是“饿汉式”单例,使用静态常量字段存储唯一实例,确保线程安全: ```java public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } ``` 以上是Java面试中常见的32个问题及其解答,涵盖了基础语法、面向对象、集合框架、并发编程等多个方面。了解这些问题,有助于提升Java程序员的面试表现。
- 粉丝: 10
- 资源: 164
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之70-climbing-stairs.c
- C语言-leetcode题解之68-text-justification.c
- C语言-leetcode题解之66-plus-one.c
- C语言-leetcode题解之64-minimum-path-sum.c
- C语言-leetcode题解之63-unique-paths-ii.c
- C语言-leetcode题解之62-unique-paths.c
- C语言-leetcode题解之61-rotate-list.c
- C语言-leetcode题解之59-spiral-matrix-ii.c
- C语言-leetcode题解之58-length-of-last-word.c
- 计算机编程课程设计基础教程