Java编程面试深度解析

需积分: 7 7 下载量 46 浏览量 更新于2024-12-23 收藏 72KB DOC 举报
"Java面试题集锦" Java作为一门广泛使用的编程语言,其面试题涵盖了语言基础、集合框架、多线程、异常处理等多个方面。以下是对这些面试题的详细解答: 1. **final, finally, finalize的区别**: - `final` 用于声明变量、方法或类,表示不可变或不可重写。 - `finally` 是在异常处理中使用,无论是否发生异常,都会执行的代码块。 - `finalize` 是对象的清理方法,系统在垃圾回收前会调用,但不保证一定会执行。 2. **AnonymousInnerClass** 可以继承其他类并实现接口,但只能继承一个类且可以实现多个接口。 3. **StaticNestedClass和Inner Class**: - Static Nested 类是静态嵌套类,可以访问外部类的静态成员,无需实例化外部类。 - Inner Class(非静态嵌套类)是内部类,可以直接访问外部类的实例成员,需要外部类实例来创建。 4. **&和&&的区别**: - `&` 是按位与操作符,无论两边表达式是否为真,都会进行运算。 - `&&` 是逻辑与操作符,如果第一个表达式为假,就不会评估第二个表达式。 5. **HashMap和Hashtable的区别**: - HashMap 允许空键值对,非同步;Hashtable 不允许空键值对,线程安全。 - HashMap 使用 `null` 作为默认负载因子,Hashtable 使用 `1.0`。 6. **Collection和Collections的区别**: - Collection 是接口,代表单个元素的集合,如 List 和 Set。 - Collections 是工具类,提供对 Collection 对象的各种操作方法,如排序、查找等。 7. **assert** 用于断言,调试时检查程序状态,只有在启动时加上 `-ea` 参数才会生效。 8. **GC(Garbage Collection)** 自动内存管理机制,回收不再使用的对象,避免内存泄漏。 9. **Strings=newString("xyz"); 创建了几个StringObject?** 创建了一个 String 对象,因为字符串字面量 "xyz" 在常量池中,而 new 会创建堆中的新对象。 10. **Math.round()**: - Math.round(11.5) 等于 12,Math.round(-11.5) 等于 -11。 11. **sleep()和wait()的区别**: - sleep() 让当前线程暂停指定时间,不会释放锁。 - wait() 使线程进入等待状态,释放所持有的锁,等待被 notify 或 notifyAll 唤醒。 12. **Java没有goto语句**,它不符合面向对象的编程理念,不利于程序的维护和理解。 13. **数组的 length 是属性,不是方法;String有length()方法**。 14. **Overload和Override的区别**: - Overload(重载)是在同一类中定义相同方法名但参数列表不同的方法。 - Override(重写)是子类重新定义父类中具有相同名称和参数列表的方法。 15. **Overloaded方法不能改变返回类型**。 16. **Set里的元素区分重复使用equals()**,因为 `==` 检查引用是否相等,而 `equals()` 检查对象内容是否相等。 17. **常见的RuntimeException如NullPointerException**,当尝试访问null对象的成员时抛出。 18. **Error和Exception**: - Error 通常是系统级错误,如虚拟机错误,程序员通常无法恢复。 - Exception 是应用程序可以预见并可能处理的异常。 19. **List, Set, Map都实现了Collection接口**,但它们分别属于 List 接口、Set 接口和 Map 接口。 20. **abstractclass和interface的区别**: - 抽象类可以包含非抽象方法和字段,可以有构造器,最多只能单继承。 - 接口只包含抽象方法和默认方法,不能有字段,可以多继承。 21. **abstract的method不能同时是static、native或synchronized**,因为它们与抽象方法的定义不兼容。 22. **接口可以继承接口**,抽象类可以实现接口,但抽象类不能继承实体类(concrete class)。 23. **启动线程使用start()**,它会调用 run() 方法,而直接调用 run() 不会启动新线程。 24. **构造器Constructor不能被override**,但可以被重载。 25. **不可以继承String类**,因为String是final类。 26. **当一个线程进入synchronized方法后,其他线程无法进入同一对象的synchronized方法**,但可以进入其他对象的synchronized方法。