Java面試陷阱第二波

發表于:2007-07-01來源:作者:點擊數: 標簽:
1. abstract class Name { private String name; public abstract boolean isStupidName(String name) {} } 大俠們,這有何錯誤? 答案: 錯。abstract method必須以分號結尾,且不帶花括號。 2. public class Something { void doSomething () { private Strin
1.

abstract class Name {

private String name;

public abstract boolean isStupidName(String name) {}

}

大俠們,這有何錯誤?

答案: 錯。abstract method必須以分號結尾,且不帶花括號。

2.

public class Something {

void doSomething () {

private String s = "";

int l = s.length();

}

}

有錯嗎?

答案: 錯。局部變量前不能放置任何訪問修飾符 (private,public,和protected)。final可以用來修飾局部變量
(final如同abstract和strictfp,都是非訪問修飾符,strictfp只能修飾class和method而非variable)。

3.

abstract class Something {

private abstract String doSomething ();

}

這好像沒什么錯吧?

答案: 錯。abstract的methods不能以private修飾。abstract的methods就是讓子類implement(實現)具體細節的,怎么可以用private把abstract
method封鎖起來呢? (同理,abstract method前不能加final)。

4.

public class Something {

public int addOne(final int x) {

return ++x;

}

}

這個比較明顯。

答案: 錯。int x被修飾成final,意味著x不能在addOne method中被修改。

5.

public class Something {

public static void main(String[] args) {

Other o = new Other();

new Something().addOne(o);

}

public void addOne(final Other o) {

o.i++;

}

}

class Other {

public int i;

}

和上面的很相似,都是關于final的問題,這有錯嗎?

答案: 正確。在addOne method中,參數o被修飾成final。如果在addOne method里我們修改了o的reference
(比如: o = new Other();),那么如同上例這題也是錯的。但這里修改的是o的member vairable
(成員變量),而o的reference并沒有改變。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97