JAVA 面试32问.doc
《JAVA 面试32问.doc》由会员分享,可在线阅读,更多相关《JAVA 面试32问.doc(7页珍藏版)》请在文库网上搜索。
1、JAVA 面试 32 问第一,谈谈 final, finally, finalize 的区别。 (最常被问到) final 修饰符(关键字) 如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract,又被声明为 final。将变量或方法声明为 final,可以保证它们在使用中不被改变。其初始化可以在两个地方:一是其定义处,也就是说在 final 变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值,而在以后的引用中只能读取,不
2、可修改。被声明为 final 的方法也同样只能使用,不能重写(override)。 finally 在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize 方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统资源或者执行其他清理工作。fina
3、lize()方法是在垃圾收集器删除对象之前对这个对象调用的。第二,Anonymous Inner Class(匿名内部类) 是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。不能 extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。第三,Static Nested Class 和 Inner Class 的不同,说得越多越好。(面试题有的很笼统) Nested(嵌套) Class(一般是 C+的说法) nested class 是合成型聚集关系(Composite Aggre
4、gation) 的另一种表达方式,也就是说 nested class 也可以用 Aggregation 表达出来,但是,nested class 更加精确地表达了一种专用的、紧耦合的关系,尤其在代码生成时,nested class 在 Java 中映射成 inline class。比如,计算机专用开关电源类可以作为计算机类的 nested class,但是,电池组类就不一定适合作为计算机类的 nested class,因为,电池组类表述的是一个过于通用的对象,可能还被包含(Aggregation)于模型中的其他设备对象。class A nested in class B,则说明 A 是一个 n
5、ested class,一般 A 是用来完成 B 中的某种重要功能。 Inner Class (一般是 JAVA 的说法) Java 内部类与 C+嵌套类最大的不同就在于是否有指向外部的引用上。 静态内部类(Inner Class)意味着 a 创建一个 static 内部类的对象,不需要一个外部类对象,b 不能从一个 static 内部类的一个对象访问一个外部类对象第四, / throws an Assertionerror if a = 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ; Expressio
6、n1 应该总是产生一个布尔值。 Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac -source 1.4 Test.java 要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。 要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上
7、放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。第八,GC 是什么?为什么要有 GC?(基础) GC 是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() gc 虽可清理,但非立刻清理第九,String s = new String(“xyz“);创建
8、了几个 String Object? 两个对象,一个是“xyx“,一个是指向“xyx“ 的引用对象 s。一个对象,一个对象引用。第十,Math.round(11.5)等于多少? Math.round(-11.5)等于多少? Math.round(11.5)返回( long)12,Math.round(-11.5)返回(long)-11; 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? ( 面试题都是很变态的,要做好受虐的准备) short s1 = 1; s1 = s1 + 1;有错,s1 是 short 型,s1
9、+1 是 int型,不能显式转化为 short 型。可修改为 s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1 正确。 Byte a=1,b=1,bye c=a+b;错误,byte 与 byte,short 与 short运算返回值为 int第十二,sleep() 和 wait() 有什么区别? (搞线程的最爱) sleep() 是使线程停止一段时间的方法。在 sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来“的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。
10、 wait() 是线程交互时,如果线程对一个同步对象 x 发出一个 wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。第十三,Java 有没有 goto?(很十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司) Goto java 中的保留字,现在没有在 java 中使用。第十四,数组有没有 length()这个方法? String 有没有 length()这个方法? 数组没有 length()这个方法,有 length 的属性。 String 有有 length()这个方法。第十五,Overload 和 Override 的区别。Overloade
11、d 的方法是否可以改变返回值的类型? (常问) 方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽“ 了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 面试 32