1. 程式人生 > 其它 >Java基礎-final關鍵字

Java基礎-final關鍵字

package com.hspedu.final_;

public class Course393 {
    public static void main(String[] args) {
        // final關鍵字

        /*
         * 1、final修飾類,這個類就不能被其他類繼承
         * 2、final修飾方法,這個方法不能被繼承的子類重寫(override)
         * 3、final修飾屬性,這個屬性的值就無法修改
         * 4、final修飾區域性變數,這個區域性變數不能被修改(稱為區域性常量)
         * 
*/ E e = new E(); // e.TAX_RATE = 0.09; } } final class A { } //class B extends A { // //} class C { public final void hi() { } } class D extends C { // @Override // public void hi() { // System.out.println("重寫C類的hi方法"); // } } class E { public final double TAX_RATE = 0.08; }
class F { public void cry() { final double NUM = 0.01; // NUM = 1; System.out.println("NUM = " + NUM); } }
package com.hspedu.final_;

public class Course394 {
    public static void main(String[] args) {
        // final細節

        /*
         * 1、final一般命名:XX_XXX;
         * 2、final定義時,必須初始化賦值:
         *   (1)定義賦值,(2)構造器賦值,(3)程式碼塊賦值
         * 3、如果final修飾的屬性是靜態static的,
         *  (1)定義賦值,(2)靜態程式碼塊,不能在構造器中賦值
         *  原因:靜態成員是在類載入的時候初始化的,物件建立才會呼叫構造器
         * 4、final不能繼承,可以例項化
         * 5、final的方法是不能重寫override,但是可以繼承提供給子類使用
         * 
*/ CC cc = new CC(); new EE().cal(); } } class AA { public final double TAX_RETE = 0.08; public final double TAX_RATE2; public final double TAX_RATE3; public AA() { TAX_RATE2 = 1.1; } { TAX_RATE3 = 8.8; } } class BB { public static final double TAX_RATE = 99.9; public static final double TAX_RATE2; // public static final double TAX_RATE3; static { TAX_RATE2 = 3.3; } // public BB() { // TAX_RATE3 = 8.8; // } } final class CC { } class DD { public final void cal() { System.out.println("cal"); } } class EE extends DD { // public final void cal() {} }
package com.hspedu.final_;

public class Course394 {
    public static void main(String[] args) {
        // final細節2

        /*
         * 1、一般對於一個final的類,沒必要將內部的方法再用final修飾
         *   該類已經不能被繼承了,就沒有重寫
         * 2、final不能修飾構造器
         * 3、final和static一般是搭配使用,不會導致類的載入,底層編譯器做了優化
         * 4、包裝類(Integer、String、Double...)這些都是final修飾的類,不能被繼承
         * */

        // 沒有呼叫靜態程式碼塊
        System.out.println(BBB.NUM);
    }
}

final class AAA {

    public final void cry() {
    }
}

class BBB {
    public final static int NUM = 10000;

    static {
        System.out.println("BBB靜態程式碼塊");
    }
}