Java编程面试深度解析
需积分: 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方法。
2023-06-02 上传
2011-03-27 上传
433 浏览量
2010-08-06 上传
2022-06-11 上传
2024-02-03 上传
2023-09-15 上传
2010-03-31 上传
2023-02-01 上传