java final關鍵字使用及面試題重點
阿新 • • 發佈:2018-11-05
java final關鍵字使用及面試題重點
1. 在java中宣告類、屬性和方法時,可以使用關鍵字final來修飾,表示“最終的”。
- final修飾類:(俗稱太監類不能有孩子)
提高安全性,提高程式的可讀性
這個類就不能被繼承。如:String類、StringBuffer類、System類
//class SubString extends String{ // //} final class A{ } //class B extends A{ // //}
- final修飾方法:(確定下功能,沒有被子類重寫的必要)
不能被子類重寫。如:Object的getClass();功能已經確定下來,就運算元類重寫了該方法後,也是實現一樣的功能,所以沒有必要被子類重寫。
class C{
public final void method1() {
System.out.println("I am method1");
}
}
class E extends C{
//// public void method1() {
// System.out.println("I am method1 for D");
// }
}
- final修飾屬性:(已經是常量)
此屬性就是一個常量,一旦初始後,不可再被賦值。習慣上,重用大寫字元表示。
此常量在哪裡賦值:①此常量不能使用預設初始②可以顯示的賦值、程式碼塊、構造器
注:顯示賦值和程式碼塊賦值只能有其中的一個
變數用static final修飾:全域性常量,如Math類的PI
public class Test { public static void main(String[] args) { C c = new C(); System.out.println(c.getClass()); System.out.println(Math.PI); } } class D{ // final int I;//常量不能使用預設的賦值 final int I = 11; final double PI; final String NAME; public void m1(){ System.out.println(I); // I = 10; } { PI = 3.14; } public D() { NAME = "DD"; } public D(String name) { this(); // NAME = "DD"; } } //c
付:後續需要知道final 與 finally finalize()區別
Object.finalize()//辣雞回收的,顯示把記憶體中物件清理掉
2.java 面試題final關鍵字知識點,例題
- 排除錯誤例題一
/*
* 錯誤,呼叫方法的時候已經對x進行賦值,不能再對其進行++操作。
*/
public class Something {
public int addOne(final int x) {
return ++x;
}
}
- 排除錯誤例題一
/*
* 正確,因為final修飾的類,但++的卻是其物件,說明類屬性改變,類不一定跟著改變
*/
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;
}