java程序员面试必备的32个要点1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一,谈谈final, finally, finalize的区别。
final修饰符(关键字),如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally再异常处理时提供finally块来执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。
finalize方法名。Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
续:
final 变量不能改变吗?
public class FirstClass {
final StringBuilder sb = new StringBuilder("init final......");
public static void main(String[] args) {
FirstClass fc = new FirstClass();
System.out.println(fc.sb.toString());
fc.sb.append(" changed");
System.out.println(fc.sb.toString());
}
}
看看能不能改变?
不能改变的是这个"变量"的句柄(的值),也就是它不能再指向其它对象,而指向的对象本身你只要有方法就可以任意改变.
final方法不能重载吗?
public class FirstClass {
final StringBuilder sb = new StringBuilder("init final......");
final void a(){}
void a(String a){}
public static void main(String[] args) throws Exception{
FirstClass fc = new FirstClass();
fc.a();
fc.a("");
}
}
只是不能被继承而已
finally从句除了在try{}catch(){}中调用了System.exit(x);
其它任何时候都会在离开该段之前执行,并不是只有抛出异常,即使return,break label也一样.
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。
第三,Static Nested Class 和Inner Class的不同,说得越多越好(面试题有的很笼统)。
1--Nested Class (一般是C++的说法),Inner Class (一般是JA V A的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
2--Nested Class 一般是C++的说法,Inner Class 一般是JA V A的说法。Nested class分为静态Static nested class 的和非静态的inner class,静态的Static nested class是不可以直接调用它的外部类enclosing class的,但是可以通过外部类的引用来调用,就像你在一个类中写了main方法一样。非静态类inner class 可以自由的引用外部类的属性和方法,但是它与一个实例绑定在了以其,不可以定义静态的属性、方法
3--
1.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中的某种重要功能的。
2.inner class(一般是Java的说法)
Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。
静态内部类(inner class)意味着:创建一个static内部类的对象,不需要一个外部类对象;不能从一个static内部类的一个对象访问一个外部类对象。
关于下面类的定义,以下哪种说法是正确的?[研华科技2005年11月面试题]
public class Droitwich{
class one{
private class two{
public void main(){
System.out.println("two");
}
}
}
}
A.此代码不能编译成功,因为该类嵌套了不止一层
B.此代码不能编译通过,因为class two是私有的
C.此代码可以编译通过,并且在运行的时候输出字符串two