|
11.2 类和对象 ( 本章字数:2919) |
面试例题1:以下代码编译时会产生错误的是______。[Trend公司2005年面试题] class reverseIt4{ public static void main(String[] args) { EnclosingClass jb2; //-----1 System.out.println(jb2.m); //-----2 }}class EnclosingClass //--------3{ public int m = 6; class InnerClass //-------4 { int msquare; InnerClass() { msquare = m*m; } }} A.语句1 B.语句2 C.语句3 D.语句4 解析:语句3和语句4显然是正确的,尽管它们的描述不是那么规范(存在一个类中的类)。语句1声明了一个类,但是没有做定义,于是问题就出现了。声明好比只是告诉编译器有一个人,但是如果不定义,这个人就是个抽象的人,没有身高、体重、年龄、职业的“空”人。所以定义对象必须在声明的同时给它定义。正确的程序如下。 class reverseIt4{ public static void main(String[] args) { EnclosingClass jb = new EnclosingClass(); System.out.println(jb.m); }}class EnclosingClass{ public int m = 6; class InnerClass { int msquare; InnerClass() { msquare = m*m; } }} 答案:该题是问编译在哪儿出现问题,尽管问题出在1处,但编译器不会发现,编译器只有在2处才会发现问题。所以答案选B。 面试例题2:Object是所有类的父类,任何类都默认继承Object。Object类到底实现了哪些方法? 答案: 1.clone方法 2.getClass方法 3.toString方法 4.finalize方法 5.equals方法 6.hashCode方法 一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。 7.wait方法 调用该方法后当前线程进入睡眠状态,直到以下事件发生。 (1)其他线程调用了该对象的notify方法。 (2)其他线程调用了该对象的notifyAll方法。 (3)其他线程调用了interrupt中断该线程。(4)时间间隔到了。 此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。 8.notify方法 9.notifyAll方法 |
| 上一页 返回书目 下一页 |