JAVA面试精华:final, finally, finalize与 AnonymousInnerClass详解

需积分: 9 2 下载量 124 浏览量 更新于2024-09-18 收藏 22KB DOCX 举报
在Java程序员面试中,面试官可能会针对各种概念和技术细节提出深入的问题,以评估候选人的知识广度和深度。以下是一些关键知识点的详细解释: 1. **final、finally、finalize的区别**: - `final`关键字用于修饰变量、方法或类,表示其不变性(常量)、不可修改性(方法)或不可实例化(类)。`finally`块在异常处理中执行,无论是否发生异常都会执行,通常用于释放资源。`finalize()`是对象生命周期中的回调方法,由垃圾收集器调用,主要用于清理工作,但不是强制性的。 2. **AnonymousInnerClass (匿名内部类)**: - 匿名内部类可以继承其他类,但不能实现接口,因为接口不允许有默认实现,必须显式指定实现的接口。它通常用于简化事件监听或者回调机制。 3. **Static Nested Class vs Inner Class**: - Static Nested Class是静态嵌套类,它与外部类共享作用域,不需要实例化就可以访问,而Inner Class(非静态)是与外部类关联的实例成员,需要外部类的对象实例才能访问。 4. **"&"与"&&"的区别**: - "&"是位运算符,用于按位与两个整数;"&&"是逻辑与操作符,用于判断条件是否都为真。 5. **HashMap与Hashtable的区别**: - HashMap是非同步的,允许null键值对,效率高但不保证线程安全;Hashtable是同步的,不允许null键值对,但查询性能略逊于HashMap。 6. **Collection与Collections的区别**: - Collection是接口,代表集合的一般行为;Collections是工具类,提供了对集合的操作方法,如排序、查找等。 7. **何时使用assert**: - assert语句用于在开发阶段检查条件是否为真,帮助发现代码错误,但在生产环境中默认关闭。 8. **垃圾回收(GC)**: - GC是Java自动管理内存的过程,负责回收不再使用的对象所占用的内存,避免内存泄露。 9. **String对象创建**: - `"xyz"`创建的是一个字符串对象,实际存储的是一个引用,不是多个对象。新创建的字符串会复用已有对象,除非涉及字符序列的变化。 10. **Math.round()方法**: - 对于浮点数11.5,Math.round()会四舍五入到最接近的整数,结果为12;对于-11.5,也会四舍五入,但由于负数规则,结果为-12。 11. **short变量操作**: - `shorts1 = 1; s1 = s1 + 1;`会编译错误,因为short类型无法直接进行加法操作,需要显式转换为int。`shorts1 = 1; s1 += 1;`是正确的,隐式将short转换为int。 12. **sleep()与wait()的区别**: - sleep()是Thread类的方法,使当前线程睡眠一段时间;wait()是Object类的方法,使线程等待某个监视器锁,直到其他线程唤醒。 13. **Java中的goto语句**: - Java不支持goto语句,避免了控制流程的混乱,推荐使用结构化的控制流。 14. **数组长度属性**: - 数组有`length`属性,返回数组元素的数量;String也有`length`属性,返回字符串中字符的数量。 15. **Overload与Override的区别**: - Overload是方法重载,指在同一类中定义多个同名但参数列表不同的方法;Override是方法覆盖,子类重写父类的方法,需要满足接口或继承关系。 16. **Set的重复元素检查**: - Set不允许重复元素,通过equals()方法判断元素是否相同,因为equals()是基于对象的比较,而非值的比较。 17. **常见RuntimeException示例**: - NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException等都是常见的运行时异常。 18. **Error与Exception的区别**: - Error表示严重且难以恢复的系统问题,如内存溢出;Exception是程序运行时的预期异常,可以捕获和处理。 19. **继承关系**: - List, Set, Map都是Collection接口的实现类,但不直接继承Collection接口,而是实现了它。 20. **abstractclass与interface的区别**: - Abstractclass可以包含实现代码,提供默认方法和字段;interface只包含抽象方法和常量,不能提供实现。 21. **abstract method属性**: - abstract方法既不能是static,也不能是native或synchronized,因为这些修饰符不允许在抽象方法上使用。 22. **接口继承**: - 接口之间可以继承,一个接口可以实现多个接口;抽象类不能实现接口,但可以继承其他类或实现接口。 23. **线程启动方法**: - 启动线程使用`start()`方法,该方法会调用Runnable接口的run()方法,启动新的线程执行。 24. **构造器覆盖**: - 构造器不能被override,但可以通过重载提供不同参数的初始化方式。 25. **继承String类**: - Java不支持继承String类,因为String是final类,不能被继承。 26. **synchronized锁定对象**: - 当一个线程进入一个对象的synchronized块时,它获得了对该对象的独占访问权限,其他线程需要等待,直到锁被释放。 通过理解和掌握这些知识点,Java程序员在面试中能够展示其扎实的基础和全面的技术理解。