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

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

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

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

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

(2)final修飾符,可以修飾變量,方法,類

1.final修飾變量,被fianl修飾的變量就會變成常量(常量應當大寫),一旦賦值不能改變,(可以在初始化時直接賦值,也可以在構造方法里也可以賦值,只能在這兩種方法里二選一,不能不為常量賦值),fianl的常量不會有默認初始值,對于直接在初始化是賦值時final修飾符常和static修飾符一起使用。

2.final修飾方法,被final修飾的方法將不能被其子類覆蓋,保持方法的穩定不能被覆蓋。

3.final修飾類,被final修飾的類將不能被繼承。final類中的方法也都是final的。

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

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

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

三者的區別以及用法

一、static 修飾屬性、方法和代碼塊

1.static修飾屬性,這個屬性就可以用類名.屬性名來訪問,也就是使這個屬性成為本類的類變量,為本類對象所共有。這個屬性就是全類公有。類加載的過程,類本身保存在文件中(字節碼文件保存著類的信息)的,java會通過I/O流把類的文件(字節碼文件)讀入JVM(java虛擬機),這個過程稱為類的加載過程。

JVM(java虛擬機)會通過類路徑(CLASSPATH)來找字節碼文件。

類變量,會在加載時自動初始化,初始化規則和實例變量相同。

特別:類中的實例變量是在創建對象時被初始化的,被static修飾的屬性(類變量),是在類加載時被創建并進行初始化,

類加載的過程是進行一次。也就是類變量只會被創建一次。

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

"類名.屬性名"以及"類名.方法"訪問舉例:

public class Test{

public static String TEST_IP="靜態ip127.0.0.1";

public static void testMethod(){

System.out.println("調用靜態方法成功!");

}

}

? 測試類

? public class Test2{

? public static void main(String args[]){

//1、通過類名.屬性名調用

System.out.println("調用的屬性值:"+Test.TEST_IP);

Test.TEST_IP="新的ip127.0.0.1";//重新修改地址指向的值

System.out.println("調用的屬性值:"+Test.TEST_IP);

//2、調用靜態方法

Test test=new Test();

test.testMethod();

}

}

特別:(1)static修飾的方法,不直接能訪問本類中的非靜態(static)成員(包括方法和屬性),本類的非靜態方法可以訪問本類的靜態成員

(包括方法和屬性)靜態方法要慎重使用(原因是靜態變量會一直存在,占用資源),且在靜態方法中不能出現this關鍵字。

(2)父類中是靜態方法,子類中不能覆蓋為非靜態方法;在符合覆蓋規則的前提下,在父子類中,父類中的靜態方法可以被子類中的靜態

方法覆蓋,但無多態。(在使用對象調用靜態方法時,實則是調用編譯時類型的靜態方法)

(3)父子類中,靜態方法只能被靜態方法覆蓋,父子類中,非靜態方法只能被非靜態方法覆蓋。

例:java中的main方法必須寫成static的,因為在類加載時無法創建對象,靜態方法可以不通過對象調用所以在類的main方法。

所在在類加載時就可以通過main方法入口來運行程序。

3.static修飾初始代碼塊,這時這個初始代碼塊就叫做靜態初始代碼塊,該代碼塊只在類加載時被執行一次。

可以用靜態初始代碼塊初始化一個類。

動態初始代碼塊,寫在類體中的“{}”,這個代碼塊是在生成對象的初始化屬性是運行。這種代碼塊叫動態初始代碼塊。

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

二、final修飾變量、方法和類

1.final修飾變量

變量被final修飾,就會變成常量(常量應大寫),一旦賦值不能改變(可以在初始化時直接賦值,也可以在構造方法里也可以賦值,

只能在這兩種方法里二選一,必須為常量賦值);final的常量不會有默認初始值,對于直接在初始化是賦值時final修飾符常和static修飾符

一起使用。

2.final修飾方法,被final修飾的方法將不能被其子類覆蓋,保持方法的穩定不能被覆蓋。

3.final修飾類,被final修飾的類將不能被繼承。final類中的方法也都是final的。

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

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

如:java.lang.String類,不變模式可以實現對象的共享(可以用一個對象實例賦值給多個對象變量)池化的思想,把需要共享的數據放在池中(節省資源空間,共享數據)

注意二:只有String類可以用“”中的字面值創建對象。在String類中,以字面值創建時,會到Java方法空間的串池空間中去查找,如果有就返 ? ? ?回串池中字符串的地址,并把這個地址付給對象變量。如果沒有則會在串池里創建一個字符串對象,并返回其地址付購對象變量,當另一個以字面時,創建對象時則會重復上述過程。

如果是new在堆空間中創建String類的對象,則不會有上述的過程。

String類中的intern()方法會將在堆空間中創建的String類對象中的字符串和串池中的比對,如果有相同的串就返回這個串的串池中的地址。不變模式在對于對象進行修改,添加操作是相當麻煩的,它會產生很多的中間垃圾對象。創建和銷毀的資源的開銷是相當大的。這就是推薦大量使用StringBuffer,而不建議使用String的原因!String類在字符串連接時會先的效率很低,就是因為它所產生的對象的屬性不能被修改的,當連接字符串時也就是只能創建新的對象。造成很多無用的資源開銷和浪費!

三、abstract修飾類和方法

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

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

注意:

(1)有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。abstract修飾符在修飾類時必須放在類名前。abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)后的方法,即抽象方法必須在其子類中實現,除非子類本身也是抽象類。

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容