麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

深入Java Final

2019-11-26 16:11:42
字體:
來源:轉載
供稿:網友

JAVA關鍵字final用于修飾數據、方法或類,通常意味著“無法改變的”,既數據不能改變,方法不能覆蓋,類不能繼承。一般采用final有兩種原因:設計和效率。而隨著JAVA版本的更新,一些效率上的問題可以交由編譯器和JVM處理。因此,采用final來解決效率問題就顯得不是那么重要了。

Final修飾符大多運用于基本數據類型(primitive)域或者不可變(immutable)類的域(如果類中的所有方法方法都不會改變其對象,這種類就是不可變類。String就是一個不可變類)。

【final數據】

Final關鍵字用修飾數據主要有兩種情況:

1. 編譯期常量

2. 運行時初始化的值

對于編譯期常量,指的是一個既是final又是static的域(依照慣例,編譯期常量全部用大寫字母命名,并且用下劃線分隔各個單詞),它只占據一段不能改變的存儲空間。編譯器可以將編譯期常量代入到任何可能用到它的計算式中,也就是說,可以在編譯時執行計算式,這相對減輕了運行時負擔。編譯期常量在定義時必須對它賦值(不一定是基本類型)。

運行時初始化的值,對于基本類型,final使得其值不可改變;而對于對象引用,final使得引用不可改變,即無法將其改為指向另一個對象,然而,對象本身卻可以修改(適用于數組,數組也是對象)。

復制代碼 代碼如下:

public class javaFinalData{

    private static final String TESTD = "test";
    public static final String TESTE = "test";
    public static final String[] TESTF = {"1","2"}; //非基本類型
    private static final String[] TESTG = new String[2];

    public static void main(String args[]){
        final int testA = 1;
        final String testB = "test";
        final int[] testC = {1,1,2,};
        System.out.println(testC[1]);
        testC[1] = 123;
        System.out.println(testC[1]);
    }
}

【未賦值的final域】

JAVA允許生成未賦值的final域,但是必須在域的定義處或者每個構造器中對final域進行賦值(有多少個構造器就必須賦值幾次),確保在使用前被初始化。采用這種方式,可以使得final運用得更加靈活,在同一個類中,根據不同的對象賦予不同的值,卻又保持不可改變的特性。

復制代碼 代碼如下:

public class javaBlankFinal{
    private final int blank;

    public javaBlankFinal(){
        blank = 2011;
    }

    public javaBlankFinal(int temp){
        blank = 2012;
    }

    public javaBlankFinal(String temp){
        blank = 2014;
    }

    public static void main(String args[]){
        new javaBlankFinal();
    }
}

【final方法】

       使用final方法有兩方面原因:一是將方法鎖定,防止方法被覆蓋,確保在繼承中方法行為保持不變;二是將方法調用轉為內聯調用(inlining),以減少方法調用的開銷。但是,在最近的版本中,JVM可以自行進行優化,因此無需使用final方法來處理效率問題。

       關于final方法,還有一點需要注意,類中所有的private方法都隱式地指定為final方法(也可以為其加上final修飾,但沒有意義)。當你試圖覆蓋一個private方法,編譯器并沒有報錯,但是,實際上你并沒有覆蓋該方法,只是生成了一個新方法。因為private方法是無法被外部類所訪問的,當然就無法覆蓋到它了。

       使用@Override注解可以防止上述問題。如程序所示:

復制代碼 代碼如下:

class finalFunction{
    private void finalFunctionA(){
        System.out.println("finalFunctionA");
    }

    private final void finalFunctionB(){
        System.out.println("finalFunctionB");
    }

    final void finalFunctionC(){
        System.out.println("finalFunctionC");
    }

    void functionD(){}
}

class overrideFinalFunction extends finalFunction{
    //@Override   添加@Override注解可以識別是否是override
    public void finalFunctionA(){              
        System.out.println("override finalFunctionA");
    }

    public final void finalFunctionB(){
        System.out.println("override finalFunctionB");
    }

    //final void finalFunctionC(){}   //Cannot override the final method from finalFunction

    @Override  
    void functionD(){} //真正的override方法
}

public class javaFinalFunction extends finalFunction{
    public static void main(String args[]){
        finalFunction ff = new finalFunction();
        //ff.finalFunctionA();  //無法調用private方法
        //ff.finalFunctionB();

        overrideFinalFunction off = new overrideFinalFunction();
        off.finalFunctionA();   //public方法
        off.finalFunctionB();
    }
}


【final類】

使用final類一般是出于設計原因,不允許該類被繼承。這樣可以保證類的行為不會改變,或許還能避免一些安全危機。Final類中所有的方法都隱式指定為final方法,因此無法被覆蓋(因為final類禁止繼承,也就無法覆蓋其類中的方法)。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止覆蓋length()等方法。

對于final域來說,即使將一個類聲明為final,類中的域不會自動成為final域。

復制代碼 代碼如下:

final class finalClass{
    int testA = 2011;
}
//class extendFinalClassextends finalClass{}  //can not extendthe final class finalClass

public class javaFinalClass{
    public static void main(String args[]){
       finalClass fc = new finalClass();
       System.out.println(fc.testA);
       fc.testA = 2012;
       System.out.println(fc.testA);
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美性生活视频免费 | 久草在线观看福利视频 | 一级免费特黄视频 | 久国久产久精永久网页 | 色播视频在线播放 | 亚洲第一成人在线观看 | 色播av在线 | av免费提供| 91精品久久久久久久久 | 91经典视频 | 一区二区国产在线 | 亚洲3p激情在线观看 | 久久另类视频 | 久久久久久久亚洲精品 | 成人不卡一区二区 | 午夜精品福利在线观看 | 日日噜噜噜噜久久久精品毛片 | h视频免费在线 | 成人毛片在线免费观看 | 精品国产呦系列在线看 | 日韩视频一二三 | 国产精品视频一区二区三区四区国 | 中文字幕精品一二三四五六七八 | 4399一级成人毛片 | 久在线观看福利视频69 | 最新在线中文字幕 | 久久亚洲线观看视频 | 精品久久久久久成人av | 久久国产精品电影 | 一区二区高清视频在线观看 | 人人舔人人插 | 精品国产一区二区三区天美传媒 | 久久噜噜噜 | 男女羞羞视频在线免费观看 | 毛片免费看网站 | 亚洲国产高清自拍 | 在线小视频国产 | 精品亚洲va在线va天堂资源站 | 一道本不卡一区 | 成人在线视频一区 | 久久久久久久久久久久久久国产 |