Java基礎之:final關鍵字
阿新 • • 發佈:2020-12-15
final(最終),final可以修飾類、屬性、方法、區域性變數
在以下情況下用到final:
-
不希望類可以被繼承時(最終類):final calss A{}
-
不希望屬性可以被改變時:public final int A = 1;
-
不希望方法可以被過載\重寫時:public final void show() {}
-
不希望區域性變數可以被更改時:final int B = 1;
簡單引用案例
package class_final; /** * * 編寫一個程式,能夠計算圓形的面積。要求圓周率為 3.14. 賦值的位置3個方式 * */ public class ClassTest { public static void main(String[] args) { Circle circle = new Circle(5.2,3.1415926); System.out.println("area:" + circle.area()); } } class Circle{ private double radius; //半徑 private final double PI /* = 3.14 */; public Circle(double radius,double PI) { this.radius = radius; this.PI = PI; } // { // PI = 3.14; // } public double area() { return radius * radius * PI; } }
final關鍵字使用細節
-
final修飾的屬性又叫做常量,一般命名方式是:XX_XX_XX
-
final屬性在定義時,必須賦初值,可以在以下三個地方賦初值:
-
定義時,例如:public int TEXT_A = 10;
-
普通程式碼塊中
-
構造器中
-
-
如果final修飾的屬性同時被static所修飾時,則就只能在以下兩個地方賦初值:
-
定義時
-
靜態程式碼塊中
-
-
final類不能繼承但可以例項化物件
-
如果類不是final類,但類中有方法是final修飾的,那麼此方法不能重寫,但可以被繼承
-
一般來說一個類已經是final類了,那麼就沒有必要再用final修飾類中的方法了
-
final不能修飾構造器
-
final 和 static 往往搭配使用,效率更高,底層編譯器做了優化處理。
-
例如: 包裝類(Integer,Double,Float,Boolean等都是final),String也是final類。
-
-
當final修飾區域性變數,我們稱為區域性常量,可在宣告時賦初值,也可以在它使用前賦值,賦初值不能再修改。
細節案例
package class_final; public class FinalDetail { public static void main(String[] args) { //細節4:final類不能繼承但可以例項化物件 new B(); } } class A{ //細節1.final修飾的屬性又叫做常量,一般命名方式是:XX_XX_XX //細節2:定義時賦初值 final int A_INT_X = 1; //細節2:程式碼塊中賦初值 final int A_INT_Y ; { A_INT_Y = 1; } //細節2:構造器中賦初值 final int A_INT_Z; public A() { A_INT_Z = 1; } //細節3:final + static修飾的屬性,在靜態程式碼塊中賦初值 final static int A_INT_H; static { A_INT_H = 1 ; } //細節5:如果類不是final類,但類中有方法是final修飾的,那麼此方法不能重寫,但可以被繼承 public final void m1() { System.out.println("A----m1"); } } final class B{ } class C extends A{ public void m2() { //細節5:如果類不是final類,但類中有方法是final修飾的,那麼此方法不能重寫,但可以被繼承 super.m1(); //細節9:當final修飾區域性變數,我們稱為區域性常量,可在宣告時賦初值,也可以在它使用前賦值,賦初值不能再修改。 final int a; a = 1; // a = 2; //報錯:The final local variable a may already have been assigned } }