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

【轉載原因:作者寫的很清楚】

【轉載原文:https://blog.csdn.net/qq_34626097/article/details/83388389

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

1. 在java中聲明類、屬性和方法時,可以使用關鍵字final來修飾,表示“最終的”。
2.java 面試題final關鍵字知識點,例題

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

1.final修飾類:(俗稱太監類不能有孩子)

提高安全性,提高程序的可讀性
這個類就不能被繼承。如:String類、StringBuffer類、System類

//class SubString extends String{
//	
//}
final class A{
	
}
//class B extends A{
//	
//} 


2.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");
//	}
}


3.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; 
	}  
} 


2.排除錯誤例題一

/*
 * 正確,因爲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;
} 

————————————————
版權聲明:本文爲CSDN博主「不等風雨,只等你」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34626097/article/details/83388389

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章