《地獄僕從》被動技能效果一覽 地獄僕從被動技能是什麼
阿新 • • 發佈:2022-05-10
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("靜態程式碼塊被執行"); } }