1. 程式人生 > 其它 >(十一)Kubernetes資源管理Pod

(十一)Kubernetes資源管理Pod

final

基本介紹:

final可以修飾類、屬性、方法和區域性變數

下面情況下可能會用到final

  • 當不希望類被繼承時,可以用final修飾;
  • 當不希望父類的某個方法被子類覆蓋/重寫時,可以用final修飾;
  • 當不希望類的某個屬性的值被修改,可以用final修飾;
  • 當不希望某個區域性變數被修改,可以用final;

案例:

package com.example.final_;



/**
 * @author gaoqinghui
 * @date 2022/4/27 16:43
 * final關鍵字的基本介紹
 */
public class Final01 {
    public static void main(String[] args) {

    }
}

//1.當不希望類被繼承時,可以用final修飾;
final class A { }

//class B extends A { }


//2.當不希望父類的某個方法被子類覆蓋/重寫時,可以用final修飾;

class AA {
    public final void hi(){};
}

//class BB extends AA{
//    @Override
//    public void hi() {
//        super.hi();
//    }
//}


//3.當不希望類的某個屬性的值被修改,可以用final修飾;

class AAA {
    public final double n1 = 100.1;

}

//4.當不希望某個區域性變數被修改,可以用final;

class AAAA {
    public void say(){
        final double n1 = 100;
        //n1 = 200;
    }
}

final細節

  • final修飾的屬性又叫常量,一般用XX_XX_XX來命名;
  • final修飾的屬性在定義時,必須賦初值,並且以後不能再修改,賦值可以在位置之一(選擇一個位置賦初值即可):
    • 定義時,如public final double TAX_RATE =0.08;
    • 在構造器中
    • 在程式碼塊中
  • 如果final修飾的屬性時靜態的,則初始化的位置只能是在:
    • 定義時
    • 在靜態程式碼塊中
    • !不能在構造器中賦值,因為靜態程式碼塊和靜態屬性在類載入時就被執行,構造器最後才被執行;
  • final類不能繼承,但是可以例項化物件;
  • 如果類不是final類,但是含有final方法,則該方法雖然不能重寫,但是類可以被繼承;
  • 一般來說,如果一個類已經是final類了,就沒有必要再將方法修飾成final方法。
    • 因為將方法用final修飾是為了不讓別人重寫這個方法,但是如果不能繼承的話重寫的類就無從談起;
  • final不能修飾構造方法(構造器)
  • final和static往往搭配使用,效率更高,因為底層編譯器做了優化處理,兩者搭配使用不會導致類載入
    • 因為往往我們呼叫靜態屬性會導致類載入,如果靜態程式碼塊中有內容就會被輸出,而我們只是想呼叫一下那個靜態變數而已。
  • 包裝類(Integer,Double,Float,Boolean等都是final修飾),String也是final類。
package com.example.final_;

/**
 * @author gaoqinghui
 * @date 2022/4/27 17:09
 */
public class FinalDeatil01 {
    public static void main(String[] args) {
        new A3();
        new A5().say();
        System.out.println(A6.n4);
    }
}

class A1 {//final修飾的是普通屬性,有下面三種定義
    private final double n1 = 100;  //1.在定義時賦初值
    private final double n2;
    private final double n3;
    { //2.在程式碼塊中賦初值
        n2 = 200;
    }

    public A1() {  //在構造器中賦初值
        n3 = 300;
    }

}

class A2 {//final修飾的是靜態屬性,有下面兩種定義
    private static final int n4 = 400;  //在定義時
    private static final int n5;


    static {    //在靜態程式碼塊中
        n5 = 500;
    }

}

//final類不能繼承,但是可以例項化物件;

final  class A3 { }

//如果類不是final類,
//但是含有final方法,則該方法雖然不能重寫,但是可以被繼承;

class A4 {
    public final void say(){
        System.out.println("hello");
    }
}

class A5 extends A4 { }

//final和static往往搭配使用,效率更高,
// 因為底層編譯器做了優化處理,兩者搭配使用**不會導致類載入**
class A6 {
    public static final double n4 = 100;
    static {
        System.out.println("靜態程式碼塊被執行");
    }
}