程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA類與對象(三)----類定義關鍵字詳解,java----

JAVA類與對象(三)----類定義關鍵字詳解,java----

編輯:JAVA綜合教程

JAVA類與對象(三)----類定義關鍵字詳解,java----


 

static 表示靜態,它可以修飾屬性,方法和代碼塊。

1.static修飾屬性(類變量),那麼這個屬性就可以用類名.屬性名來訪問,也就是使這個屬性成為本類的類變量,為本類對象所共有。這個屬性就是全類公有。(共有的類變量與對象無關,只和類有關)。

注意:類中的實例變量是在創建對象時被初始化的,被static修飾的屬性,也就是類變量,是在類加載時被創建並進行初始化,類加載的過程是進行一次。也就是類變量只會被創建一次。

2.static修飾方法(靜態方法),會使這個方法成為整個類所公有的方法,可以用類名.方法名訪問。

注意:static修飾的方法,不直接能訪問本類中的非靜態(static)成員(包括方法和屬性),本類的靜態(static)方法可以訪問本類的靜態成員(包括方法和屬性),可以調用靜態方法。靜態方法要慎重使用。在靜態方法中不能出現this關鍵字。

注意:父類中是靜態方法,子類中不能覆蓋為非靜態方法,在符合覆蓋規則的前提下,在父子類中,父類中的靜態方法可以被子類中的靜態方法覆蓋,但是沒有多態。

注意:父子類中,靜態方法只能被靜態方法覆蓋,父子類中,非靜態方法只能被非靜態方法覆蓋。

 

3.static修飾初始代碼塊,這個代碼塊只在類加載時被執行一次。可以用靜態初始代碼塊初始化一個類。動態初始代碼塊,寫在類體中的“{}”,這個代碼塊是在生成對象的初始化屬性是運行。

 

補充:類在什麼時候會被加載?

創建對象時會加載類,調用類中靜態方法或訪問靜態屬性也是會加載類的。在加載子類時必會先加載父類,類加載會有延遲加載原則,只有在必須加載時才會加載

 

final修飾符,可以修飾變量,方法,類
1.final修飾變量
被 fianl修飾的變量就會變成常量(常量應當大寫),一旦賦值不能改變,fianl的常量不會有默認初始值,對於直接在初始化是賦值時final修飾符常和static修飾符一起使用。

2.final修飾方法,被final修飾的方法將不能被其子類覆蓋,保持方法的穩定不能被覆蓋。
3.final修飾類,被final修飾的類將不能被繼承。final類中的方法也都是final的。

注意:(1)、final,不能用來修飾構造方法,在父類中如果有常量屬性,在子類中使用常量屬性時是不會進行父類的類加載。

        (2)、不變模式,對象一旦創建屬性就不會改變。用final修飾屬性,也用final修飾類(強不變模式),用final修飾屬性(弱不變模式)。

 

 

abstract(抽象)修飾符,可以修飾類和方法

1.abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯時類型,抽象類就像當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。

2.abstract修飾方法,會使這個方法變成抽象方法,也就是只有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。

注意:(1)、有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
        (2)、abstract修飾符在修飾類時必須放在類名前。

        (3)、abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類本身也是抽象類。

注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類也必須是抽象類。抽象類中可以有構造方法,是子類在構造子類對象時需要調用的父類(抽象類)的構造方法。

final和abstract,private和abstract,static和abstract,這些是不能放在一起的修飾符,因為 abstract修飾的方法是必須在其子類中實現(覆蓋),才能以多態方式調用,以上修飾符在修飾方法時期子類都覆蓋不了這個方法,final是不可以覆 蓋,private是不能夠繼承到子類,所以也就不能覆蓋,static是可以覆蓋的,但是在調用時會調用編譯時類型的方法,因為調用的是父類的方法,而 父類的方法又是抽象的方法,又不能夠調用,所以上的修飾符不能放在一起。

抽象(abstract)方法代表了某種標准,定義標准,定義功能,在子類中去實現功能(子類繼承了父類並需要給出從父類繼承的抽象方法的實現)。
方法一時間想不到怎麼被實現,或有意要子類去實現而定義某種標准,這個方法可以被定義為抽象。(abstract)

 

 

public(公共訪問權限):

這是一個寬松的訪問控制級別,如果一個成員(包括成員變量、方法和構造器等)或者一個外部類使用public訪問控制符修飾,那麼這個成員或外部類就可以被所有類訪問,不管訪問類和被訪問類是否處於同一個包中,是否具有父子繼承關系。

private(當前類訪問權限): 如果類裡的一個成員(包括成員變量、方法和構造器等)使用private訪問控制符來修飾,則這個成員只能在當前類的內部被訪問。很顯然,這個訪問控制符用於修飾成員變量最合適,使用它來修飾成員變量就可以把成員變量隱藏在該類內部。 protected(子類訪問權限): 如果一個成員(包括成員變量、方法和構造器等)使用protected訪問控制符修飾,那麼這個成員既可以被同一個包中的其他類訪問,也可以被不同包中的子類訪問。在通常情況下,如果使用protected來修飾一個方法,通常是希望其子類來重寫這個方法。 default(包訪問權限): 如果類裡的一個成員(包括成員變量、方法和構造器等)或者一個外部類不使用任何訪問控制符修飾,就稱它是包訪問權限,default訪問控制的成員或外部類可以被相同包下的其他類訪問。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved