CoreJava學習第七課-三個修飾符

三個修飾符

一. abstract 抽象--->和多態有關

1.4種訪問修飾符可以修飾的範圍

private 屬性 方法 構造方法  
default 屬性 方法 構造方法
protected 屬性 方法 構造方法  
public 屬性 方法 構造方法

2.abstract 抽象:可以用來修飾類和方法。

1.類    ①抽象類只能聲明引用,不能創建對象  供子類繼承②不能用new來創建抽象類,不會創建出獨立的抽象類的;但抽象類可以作爲子類的一部分存在,創建子類之前,還是會先創建父類對象。
2.方法   抽象方法只有聲明, 沒有實現。供子類實現(實現是一種特殊的覆蓋,覆蓋一般在兩個普通的類之間發生;實現是在一般的類和抽象類之間發生)
a).如果一個類具有抽象方法,那麼這個類就必須是抽象類; 抽象類未必有抽象方法
b).一個類繼承抽象類,如果這個類不希望也成爲抽象類,就必須實現父類中所有的抽象方法

c).抽象類也擁有構造方法, 供子類用super(...)調用
d).抽象方法可以使方法的聲明和實現分離,聲明提取到父類,實現留在子類, 更好的體現"子類的共性放在父類"設計思想
java語法:
	1.編譯語法:  抽象類和抽象方法都是給編譯器用的。
	2.虛擬機語法:已經通過編譯後,在運行時,抽象類和抽象方法都會被當成普通類,普通方法使用。

二.static 靜態--->和類有關

1.static 修飾

 

1.屬性      靜態屬性不屬於任何對象, 全類共有         可以用類名直接訪問
​
2.方法      靜態方法可以直接用類名調用,和對象無關
            靜態方法只能訪問類的靜態成員
            非靜態方法只能被子類的非靜態方法覆蓋,靜態方法只能被子類的靜態方法覆蓋, 而且沒有多態   
            (對引用調用靜態方法,等價於對引用的類型調用靜態方法)
        [在非靜態方法中,無論方法或屬性是否是靜態的,都能夠訪問;而在靜態方法中,只能訪問靜態屬性和方法]
3.初始代碼塊  初始化操作時,執行初始化代碼塊的內容
            靜態初始代碼塊 在類加載的時候執行一次
class MyClass{
    {
        System.out.println("這是初始代碼塊!");//初始化操作時,執行初始化代碼塊的內容
    }
    static{
        System.out.println("hehe");//靜態初始代碼塊,在類加載的時候執行一次
    }
    public MyClass(){
        System.out.println("MyClass()構造方法");
    }
}
結果:
    hehe
    這是初始代碼塊!
    MyClass()構造方法

2.類加載

​ 類加載發生在創建對象之前,且只做一次。

​ 當JVM第一次使用一個類的時候,需要讀取這個類對應的字節碼文件,獲取類的信息並保存起來

類加載的過程:
  1.如果需要,先加載父類
  2.按照代碼順序,初始化靜態屬性,並執行靜態初始代碼塊
  (從網上摘錄https://blog.csdn.net/dawn_after_dark/article/details/74091898)
  	1,一般情況:執行順序爲:靜態代碼塊>非靜態代碼塊>構造方法>類的方法
    2,在繼承機制中,創建子類對象時會先初始化父類對象再初始化子類對象,所以這裏又涉及到了代碼塊的執行順序。 
  簡單概括爲:父類靜態代碼塊>子類靜態代碼塊>父類非靜態代碼塊>父類構造函數>子類非靜態代碼塊>子類構造函數 
  以上執行順序會依次進行,若沒有就跳過,直到結束
類加載的時機:
  1.第一次創建對象
  2.第一次訪問類的靜態成員  

三.final

1.final修飾

final可修飾 
    1.方法    不能被子類覆蓋
    2.類      不能被子類繼承
    3.變量    一旦賦值,不能改變   常量
              用final修飾的成員變量沒有默認值     
              利用初始化屬性的方式爲常量賦值的, 應設置爲static, 需要注意常量名全大寫
              class B{
                final int M = 10;//賦值方式1:初始化賦值
    
                final int N;
                public B(int i){//賦值方式2:構造方法賦值
                    this.N = i;
                }
                public B(){//賦值方式2:構造方法賦值
                    this.N = 10;
                }
            }

2.修飾符組合

    static , final ,private   不能和abstract同時出現
    abstract和多態相關,父類方法聲明成abstract,由子類去實現,
    而final修飾的類是不能被繼承的;
    static和類有關,與對象無關,對static修飾的類調用類中的方法,只會調用本類的方法,不會調用子類的方法;
    private修飾的方法和屬性不會被子類擁有,所以談不上方法覆蓋之類的,無法與abstract同時出現。

總結

static 修飾範圍 abstract 修飾範圍 final 修飾範圍
屬性、方法、初始代碼塊 類、方法 類、方法、變量(屬性、局部變量、方法參數)
static 不可修飾 abstract 不可修飾 final 不可修飾
局部變量、類    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章