tool
发贴: 7
积分: 0
|
于 2004-12-31 07:17
我来谈谈其中几个问题的看法: 二: 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
对照一下下面的程序,这个答案给只能让人更加迷惑。
void foo() { InputStream in = new InputStream(){public int read(){return -1;}}; Comparable cmp= new Comparable(){public int compareTo(Object x){return 0;}}; }
上面两个匿名的内部类,in 明显是继承了InputStream, cmp明显是实现了Comparable接口。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。 问题和答案都不是很好。什么叫return后?一个method在return后当然不可能再执行这个method的任何指令,包括finaly.如果会执行,当然在return前执行。 int a = 1; try { return a; } finally { a = 2; } 看看这个例子,你的问题和答案都不能说清楚 return的是1还是2。实际上,finally里面的a=2是被执行了,但return的却是1.
第二十九,两个对象值相同(x.equals == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。 从应用程序的要求上是应该有相同的hashCode,但java语言上并不是一定不可以有不同的hashCode,只是没有人这样写罢了。 class XXX { int value; public int hashCode() { return super.hashCode(); } public boolean equals(Object x) { return ((XXX)x).value == value; } }
第九,String s = new String("xyz");创建了几个String Object?
两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。 问题和答案还不能清楚地解释jvm对string的处理机制。 String s1 = new String("xyz"); String s2 = new String("xyz"); 一共创建了几个对象?2+2? "xyz"是和s,s1,s2一样的方式被创建的吗?
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
严格地说,switch和case都必需是int类型,由于short,char,byte都可以直接转换成int而且不丢失数据,所以short char byte用在switch中也可以被编译通过。
|