【JAVA提升】- 關鍵字

1. static

/**
 * Created by fun on 2017/2/13.
 */
public class StaticDemo {
    private static String prop = null;
    static{
        prop = "static";
        System.out.println("static code block.......");
    }
    public StaticDemo(){
        prop = "constructor";
        System.out.println("constructor.......");
    }

    public static void sayHello(){

        System.out.println("sayHello method print the prop="+prop);
    }
    public void sayHello2(){
        prop = "sayHello2";
        System.out.println("sayHello2 method print the prop="+prop);
    }
}
  1. 使用StaticDemo的任何方法(靜態(tài)或者非靜態(tài)方法),static代碼塊僅且執(zhí)行一次
  2. 非靜態(tài)成員方法可以操作靜態(tài)成員變量的值
  3. 構造方法只在new 關鍵字出現(xiàn),new新的對象的時候調用,使用類名直接調用靜態(tài)方法的時候沒有調用構造方法
  4. static不能用來修飾普通內部類中的變量,如果內部類本身是static的是可以的

2. final

在java中,可能使用到final關鍵字修飾的有數(shù)據(jù)、方法和類。

2.1 final 修飾數(shù)據(jù)

有final修飾的數(shù)據(jù)是用來告訴編譯器一塊數(shù)據(jù)是恒定不變的,有時數(shù)據(jù)恒定不變是很有用的,比如:

  1. 一個永不改變的編譯時常量。
  2. 一個在運行時被初始化的值,但是又不希望它被改變。

編譯時常量必須是基本數(shù)據(jù)類型,并且以關鍵字final修飾,在對這個常量進行定義的時候必須進行賦值,并且以后不能被改變。

對于基本類型,final使數(shù)值恒定不變;而對于對象引用,final使引用恒定不變,也就是說某個引用不能再指向其他對象了,但是當前指向的這個對象自身的數(shù)據(jù)是可以改變的。

如何理解上面的解釋呢,看如下示例:

public void test(final Student student) {
    // student = new Student() // 這種寫法就會報錯,因為改變了student的指向,但是student是個final的。
    
    student.setName("123"); // 這種操作是可以的,并且student的name會被成功修改
    
}

2.2 final修飾方法

使用final修飾方法的作用是把方法鎖定,以防止任何繼承類修改它的含義。在繼承類中,使用了與父類用final修飾的方法同名的方法時,并沒有覆蓋父類的該方法,而是生成了一個新的方法。也就是說final修飾的方法不能被重寫。

2.3 final修飾類

當將某個類定義為final時,就表明了你不打算繼承該類,也不允許別人繼承。

3. transient

使用transient 關鍵字,標記變量不被序列化和反序列化

談到序列化,static 變量也是不會被序列化的

4. volatile

volatile 可以保證變量對所有線程的可見性,但是不能說是完全的線程,例如++ 操作是個非原子操作,就有可能出現(xiàn)問題

volatile只保證了可見性,在不滿足以下情況的時候,需要加鎖(synchronized 或者 java.util.concurrent中的原子類)來保證原子性

  1. 運算結果并不依賴變量的當前值,后者能夠確保只有單一線程修改變量的值
  2. 變量不需要同其他的狀態(tài)變量一起參與不變約束

volatile 修飾long / double 在多線程的時候可以把他們的讀寫變成原子的操作(現(xiàn)代的虛擬機已經把64位數(shù)據(jù)讀寫作為原子操作了)

volatile可以防止指令重排序

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,801評論 11 349
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評論 18 399
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,452評論 0 16
  • 一,為什么要做技術性測試-物競天擇,人勢所趨: 1,手工測試越來越年輕化、入門化,而我們則年齡越來越大; 2,懂技...
    權艷霞閱讀 1,563評論 0 1
  • 光陰似箭,日月如梭,時光如白駒過隙般飛逝。已到年末,大家都滿心歡喜的盼望著2017年春節(jié)的到來。 這一年,我懂了很...
    蠟筆滴愛十年閱讀 279評論 0 0

友情鏈接更多精彩內容