【轉載原因:作者寫的很清楚】
【轉載原文: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