Java 经典面试题 32 问 www.mju.edu.cn
JAVA 面试 32 问
第一, 谈谈 nal, nally, nalize 的区别。 (最常被问到)
final 修饰符(关键字)
如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承。因此
一个类不能既被声明为 abstract,又被声明为 final。将变量或方法声明为 final,可以保证它
们在使用中不被改变。其初始化可以在两个地方:一是其定义处,也就是说在 final 变量定
义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要
么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值,而在以
后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重写
(override)。
finally
在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch
子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize
方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必
要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统
资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用
的。
第二,Anonymous Inner Class(匿名内部类) 是否可以 extends(继承)其它类,是
否可以 implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能 extends(继承) 其它类,但一个内部类可以作
为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class 的不同,说得越多越好。(面试题有的很笼
统)
Nested(嵌套)Class(一般是 C++的说法)
nested class 是合成型聚集关系(Composite Aggregation) 的另一种表达方式,也
就是说 nested class 也可以用 Aggregation 表达出来,但是,nested class 更加精确
地表达了一种专用的、紧耦合的关系,尤其在代码生成时,nested class 在 Java 中映射
成 inline class。比如,计算机专用开关电源类可以作为计算机类的 nested class,但是,
电池组类就不一定适合作为计算机类的 nested class,因为,电池组类表述的是一个过于
通用的对象,可能还被包含(Aggregation)于模型中的其他设备对象。class A nested
in class B,则说明 A 是一个 nested class,一般 A 是用来完成 B 中的某种重要功能。
Inner Class (一般是 JAVA 的说法)
Java 内部类与 C++嵌套类最大的不同就在于是否有指向外部的引用上。
静态内部类(Inner Class)意味着 a 创建一个 static 内部类的对象,不需要一个外部类
对象,b 不能从一个 static 内部类的一个对象访问一个外部类对象
第四,&和&&的区别。(这个问得很少)
&是位运算符。&可为位运算,也可为逻辑运算,看情况而定。&&是布尔逻辑运算符。
第五,HashMap 和 Hashtable 的区别。(常问)