1. 程式人生 > >java final關鍵字使用及面試題重點

java final關鍵字使用及面試題重點

java final關鍵字使用及面試題重點

1. 在java中宣告類、屬性和方法時,可以使用關鍵字final來修飾,表示“最終的”。

  1. final修飾類:(俗稱太監類不能有孩子)
    提高安全性,提高程式的可讀性
    這個類就不能被繼承。如:String類、StringBuffer類、System類
//class SubString extends String{
//	
//}
final class A{
	
}
//class B extends A{
//	
//} 
  1. 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");
//	}
}
  1. 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關鍵字知識點,例題

  1. 排除錯誤例題一
/*
 * 錯誤,呼叫方法的時候已經對x進行賦值,不能再對其進行++操作。
 */
public class Something { 
	public int addOne(final int x) { 
		return ++x; 
	}  
} 
  1. 排除錯誤例題一
/*
 * 正確,因為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;
}