2014-07-30 20:02:00|?次阅读|上传:wustguangh【已有?条评论】发表评论
和上面的很相似,都是关于 final 的问题,这有错吗 ?
答案 : 正确。在 addOne method 中,参数 o 被修饰成 final 。如果在 addOne method 里我们修改了 o 的 reference
( 比如 : o = new Other();) ,那么如同上例这题也是错的。但这里修改的是 o 的 member vairable
( 成员变量 ) ,而 o 的 reference 并没有改变。
6.
class Something { int i; public void doSomething() { System.out.println("i = " + i); } }
有什么错呢 ? 看不出来啊。
答案 : 正确。输出的是 "i = 0" 。 int i 属於 instant variable ( 实例变量,或叫成员变量 ) 。 instant variable 有 default value 。 int 的 default value 是 0 。
7.
class Something { final int i; public void doSomething() { System.out.println("i = " + i); } }
和上面一题只有一个地方不同,就是多了一个 final 。这难道就错了吗 ?
答案 : 错。 final int i 是个 final 的 instant variable ( 实例变量,或叫成员变量 ) 。 final 的 instant variable 没有 default value ,必须在 constructor ( 构造器 ) 结束之前被赋予一个明确的值。可以修改为 "final int i = 0;" 。
8.
public class Something { public static void main(String[] args) { Something s = new Something(); System.out.println("s.doSomething() returns " + doSomething()); } public String doSomething() { return "Do something ..."; } }
看上去很完美。
答案 : 错。看上去在 main 里 call doSomething 没有什么问题,毕竟两个 methods 都在同一个 class 里。但仔细看, main 是 static 的。 static method 不能直接 call non-static methods 。可改成 "System.out.println("s.doSomething() returns " + s.doSomething());" 。同理, static method 不能访问 non-static instant variable 。
9.
此处, Something 类的文件名叫 OtherThing.java
class Something { private static void main(String[] something_to_do) { System.out.println("Do something ..."); } }
这个好像很明显。