abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
答案:錯院尔。abstract method 必須以分號結(jié)尾兰粉,且不帶花括號棚赔。
public class Something {
void doSomething() {
private String s = "";
int I = s.length();
}
}
答案: 錯单寂。局部變量前不能放置任何訪問修飾符 (private,public笑诅,和 protected)。final 可以用來修飾局部變量
(final 如同 abstract 和 strictfp吆你,都是非訪問修飾符弦叶,strictfp 只能修飾 class 和 method 而非variable)。
public class Something {
private abstract String doSomething();
}
答案: 錯妇多。abstract 的 methods 不能以 private 修飾伤哺。abstract 的 methods 就是讓子類implement(實(shí)現(xiàn))具體細(xì)節(jié)的,怎么可以用 private 把 abstract method 封鎖起來呢? (同理者祖,abstract method 前不能加 final)立莉。
public class Something {
public int addOne(final int x) {
return ++x;
}
}
答案: 錯。int x 被修飾成 final七问,意味著 x 不能在 addOne method 中被修改蜓耻。
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;
}
答案: 正確。在 addOne method 中械巡,參數(shù) o 被修飾成 final刹淌。如果在 addOne method 里我們修改了 o 的 reference(比如: o = new Other();),那么如同上例這題也是錯的坟比。但這里修改的是 o 的 member vairable(成員變量),而 o 的 reference 并沒有改變嚷往。
final關(guān)鍵字
final修飾變量
final關(guān)鍵字修飾變量葛账,意為不可改變。
-
final修飾成員變量皮仁,兩種方式初始化:
- 聲明同時(shí)初始化
- 構(gòu)造函數(shù)中初始化
-
final關(guān)鍵字也可以修飾局部變量籍琳,使用之前初始化即可菲宴。
public class Emp { private final int no = 100; //final變量聲明時(shí)初始化 public void testFinal(){ no = 99;//編譯錯誤,final的變量不可被改變 } }
final修飾方法
- final關(guān)鍵字修飾的方法不可以被重寫。
- 使一個(gè)方法不能被重寫的意義在于:防止子類在定義新方法時(shí)造成的"不經(jīng)意"重寫趋急。
2018-01-01 14-23-22屏幕截圖.png
final修飾類
-
final關(guān)鍵字修飾的類不可以被繼承喝峦。
final class Foo { }
class Goo extends Foo { } //會有編譯錯誤
JDK中的一些基礎(chǔ)類庫被定義為final的,例如:String呜达、Math谣蠢、Integer、Double等等查近。
使一個(gè)類不能被繼承的意義在于:可以保護(hù)類不被繼承修改眉踱,可以控制濫用繼承對系統(tǒng)造成的危害
static final常量
static final 修飾的成員變量成為常量,必須聲明同時(shí)初始化霜威,不可被改變谈喳。
-
static final 常量會在編譯期被替換,例如:
class Foo{ public static final int NUM = 100; }
class Goo{ public static void main(String[] args){ System.out.println(Foo.NUM); // 代碼編譯時(shí)戈泼,會替換為:System.out.println(100); } }
static final 常量 Foo.NUM會在編譯時(shí)被替換為其常量值(100) 婿禽,在運(yùn)行Goo類時(shí),F(xiàn)oo類不需要被載入大猛。
?