在Java面试笔试中,面试官经常提问各种深入和广泛的问题,旨在测试候选人的技术理解、编程技巧和解决问题的能力。以下是一些常见且重要的知识点总结:
1. **final, finally, finalize的区别**:
- `final`:修饰变量表示其值不可变,修饰方法表示方法不可被重写,修饰类表示该类不能被继承。
- `finally`:Java中的异常处理结构,无论是否发生异常,finally块中的代码都会被执行,常用于资源管理。
- `finalize()`:垃圾回收器调用的特殊方法,用于清理对象,但并非所有对象都能被调用。
2. **AnonymousInnerClass (匿名内部类)**:
- 可以作为实现接口的匿名方式,但不能同时继承其他类,因为Java不支持多重继承。
- 匿名内部类主要用于简化实现简单的接口或者创建自定义事件监听器。
3. **StaticNestedClass和Inner Class**:
- Static Nested Class(静态嵌套类)是非实例化的,它有自己的作用域,与外部类共享同一个命名空间。
- Inner Class(普通嵌套类)是实例化的,每个外部类实例都有一个独立的内嵌类实例。
4. **&和&&的区别**:
- `&`是位运算符,用于按位与操作,`&&`是逻辑与运算符,用于条件判断。
5. **HashMap和Hashtable的区别**:
- HashMap是非同步的,而Hashtable是同步的,这意味着Hashtable在多线程环境下性能较差。
- HashMap允许null键值对,而Hashtable不允许。
- HashMap的元素顺序是不确定的,Hashtable则保持插入顺序。
6. **Collection和Collections的区别**:
- Collection是接口,代表集合类的超类型,如List、Set、Queue等。
- Collections是Java集合框架提供的工具类,包含各种操作集合的静态方法,如排序、查找等。
7. **assert和垃圾回收(GC)**:
- assert用于断言程序中的条件,当条件为假时抛出AssertionError。
- GC(Garbage Collector)是自动内存管理机制,负责回收不再使用的内存,避免内存泄漏。
8. **String对象创建**:
- `new String("xyz")`创建了两个String对象,因为字符串是不可变的,每次创建新对象。
- Stringintern()方法可以优化这种情况,如果字符串已在常量池中存在,返回的是池中的引用。
9. **数值运算和类型转换**:
- `Math.round(11.5)` 返回12,`Math.round(-11.5)` 返回-12,涉及到浮点数舍入规则。
- shorts1的例子展示了类型不匹配导致的问题,短整型变量不能直接加1,需要显式类型转换。
10. **线程控制**:
- `sleep()`让当前线程休眠指定时间,不释放锁;`wait()`使线程等待,直到其他线程唤醒,必须在synchronized上下文中使用。
11. **面向对象特征**:
- 抽象:关注核心,忽略细节。
- 继承:类间的共享和复用,避免代码冗余。
- 封装:隐藏实现细节,提供安全的接口。
- 多态性:同一接口多种表现形式,提高代码灵活性。
掌握这些知识点不仅有助于通过Java面试,还能提升编程实践中的理解和应用能力。在准备面试时,不仅要熟悉理论,还要能灵活运用并解决实际问题。