java常用關(guān)鍵字理解

1.static

靜態(tài)的 全局的,一旦被修飾,說(shuō)明被修飾的東西在一定范圍內(nèi)是共享的离福,誰(shuí)都可以訪問(wèn),這時(shí)候需要注意并發(fā)讀寫(xiě)的問(wèn)題炼蛤。

1.1修飾的對(duì)象

只能修飾類(lèi)變量妖爷,方法和方法塊。

當(dāng) static 修飾類(lèi)變量時(shí)理朋,如果該變量是 public 的話(huà)絮识,表示該變量任何類(lèi)都可以直接訪問(wèn),而且無(wú)需初始化類(lèi)嗽上,直接使用 類(lèi)名.static 變量 這種形式訪問(wèn)即可次舌。

這時(shí)候我們非常需要注意的一點(diǎn)就是線(xiàn)程安全的問(wèn)題了,因?yàn)楫?dāng)多個(gè)線(xiàn)程同時(shí)對(duì)共享變量進(jìn)行讀寫(xiě)時(shí)兽愤,很有可能會(huì)出現(xiàn)并發(fā)問(wèn)題彼念,如我們定義了:public static List<String> list = new ArrayList();這樣的共享變量。這個(gè) list 如果同時(shí)被多個(gè)線(xiàn)程訪問(wèn)的話(huà)浅萧,就有線(xiàn)程安全的問(wèn)題逐沙,這時(shí)候一般有兩個(gè)解決辦法:

  1. 把線(xiàn)程不安全的 ArrayList 換成 線(xiàn)程安全的 CopyOnWriteArrayList;
  2. 每次訪問(wèn)時(shí)洼畅,手動(dòng)加鎖吩案。

所以在使用 static 修飾類(lèi)變量時(shí),如何保證線(xiàn)程安全是我們常常需要考慮的帝簇。

當(dāng) static 修飾方法時(shí)徘郭,代表該方法和當(dāng)前類(lèi)是無(wú)關(guān)的,任意類(lèi)都可以直接訪問(wèn)(如果權(quán)限是 public 的話(huà))丧肴。
有一點(diǎn)需要注意的是残揉,該方法內(nèi)部只能調(diào)用同樣被 static 修飾的方法,不能調(diào)用普通方法闪湾,我們常用的 util 類(lèi)里面的各種方法冲甘,我們比較喜歡用 static 修飾方法,好處就是調(diào)用特別方便途样。

static 方法內(nèi)部的變量在執(zhí)行時(shí)是沒(méi)有線(xiàn)程安全問(wèn)題的江醇。方法執(zhí)行時(shí),數(shù)據(jù)運(yùn)行在棧里面何暇,棧的數(shù)據(jù)每個(gè)線(xiàn)程都是隔離開(kāi)的陶夜,所以不會(huì)有線(xiàn)程安全的問(wèn)題,所以 util 類(lèi)的各個(gè) static 方法裆站,我們是可以放心使用的条辟。

當(dāng) static 修飾方法塊時(shí)黔夭,我們叫做靜態(tài)塊,靜態(tài)塊常常用于在類(lèi)啟動(dòng)之前羽嫡,初始化一些值本姥,比如:

    public static List<String> list = new ArrayList<>();
    //進(jìn)行初始化操作
    static {
        list.add("1");
        list.add("2");
        list.add("3");
    }

1.2 初始化時(shí)機(jī)

對(duì)于被 static 修飾的類(lèi)變量、方法塊和靜態(tài)方法的初始化時(shí)機(jī)杭棵,我們寫(xiě)了一個(gè)測(cè)試 demo婚惫,如下圖:


父類(lèi)

子類(lèi)

我們運(yùn)行子類(lèi)中的new StaticClass(); 輸出如下:

父類(lèi)靜態(tài)變量初始化
父類(lèi)靜態(tài)塊初始化
子類(lèi)靜態(tài)變量初始化
子類(lèi)靜態(tài)塊初始化
main方法調(diào)用
父類(lèi)構(gòu)造器初始化
子類(lèi)構(gòu)造器初始化

從結(jié)果中,我們可以看出兩點(diǎn):

  1. 父類(lèi)的靜態(tài)變量和靜態(tài)塊比子類(lèi)優(yōu)先初始化魂爪;
  2. 靜態(tài)變量和靜態(tài)塊比類(lèi)構(gòu)造器優(yōu)先初始化先舷。

我們運(yùn)行子類(lèi)中的StaticClass.testStatic(); 輸出如下:

父類(lèi)靜態(tài)變量初始化
父類(lèi)靜態(tài)塊初始化
子類(lèi)靜態(tài)變量初始化
子類(lèi)靜態(tài)塊初始化
main方法調(diào)用
子類(lèi)靜態(tài)方法被調(diào)用

從結(jié)果中,我們可以看出:
被 static 修飾的方法滓侍,在類(lèi)初始化的時(shí)候并不會(huì)初始化蒋川,只有當(dāng)自己被調(diào)用時(shí),才會(huì)被執(zhí)行撩笆。

2. final

final 的意思是不變的捺球,一般來(lái)說(shuō)用于以下三種場(chǎng)景:

被 final 修飾的類(lèi),表明該類(lèi)是無(wú)法繼承的浇衬;
被 final 修飾的方法懒构,表明該方法是無(wú)法覆寫(xiě)的;
被 final 修飾的變量耘擂,說(shuō)明該變量在聲明的時(shí)候,就必須初始化完成絮姆,而且以后也不能修改其內(nèi)存地址醉冤。
第三點(diǎn)注意下,我們說(shuō)的是無(wú)法修改其內(nèi)存地址篙悯,并沒(méi)有說(shuō)無(wú)法修改其值蚁阳。因?yàn)閷?duì)于 List、Map 這些集合類(lèi)來(lái)說(shuō)鸽照,被 final 修飾后螺捐,是可以修改其內(nèi)部值的,但卻無(wú)法修改其初始化時(shí)的內(nèi)存地址矮燎。

例子我們就不舉了定血,String 的不變性就是一個(gè)很好的例子。

3. try诞外、catch澜沟、finally

這三個(gè)關(guān)鍵字常用于我們捕捉異常的一整套流程,try 用來(lái)確定代碼執(zhí)行的范圍峡谊,catch 捕捉可能會(huì)發(fā)生的異常茫虽,finally 用來(lái)執(zhí)行一定要執(zhí)行的代碼塊刊苍,除了這些,我們還需要清楚濒析,每個(gè)地方如果發(fā)生異常會(huì)怎么辦.:

 public void testCatchFinally() {
        try {
            System.out.println("try is run");
            if (true) {
                throw new RuntimeException("try exception");
            }
        } catch (Exception e) {
            System.out.println("catch is run");
            if (true) {
                throw new RuntimeException("catch exception");
            }
        } finally {
            System.out.println("finally is run");
        }
    }

輸出:

try is run
catch is run
finally is run
Exception in thread "main" java.lang.RuntimeException: catch exception
    at 

這個(gè)代碼演示了在 try正什、catch 中都遇到了異常,代碼的執(zhí)行順序?yàn)椋簍ry -> catch -> finally
可以看到兩點(diǎn):

  1. finally 先執(zhí)行后号杏,再拋出 catch 的異常埠忘;
  2. 最終捕獲的異常是 catch 的異常,try 拋出來(lái)的異常已經(jīng)被 catch 吃掉了馒索,所以當(dāng)我們遇見(jiàn) catch 也有可能會(huì)拋出異常時(shí)莹妒,我們可以先打印出 try 的異常,這樣 try 的異常在日志中就會(huì)有所體現(xiàn)绰上。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末旨怠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜈块,更是在濱河造成了極大的恐慌鉴腻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件百揭,死亡現(xiàn)場(chǎng)離奇詭異爽哎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)器一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)课锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人祈秕,你說(shuō)我怎么就攤上這事渺贤。” “怎么了请毛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵志鞍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我方仿,道長(zhǎng)固棚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任仙蚜,我火速辦了婚禮此洲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳍征。我一直安慰自己黍翎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布艳丛。 她就那樣靜靜地躺著匣掸,像睡著了一般趟紊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碰酝,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天霎匈,我揣著相機(jī)與錄音,去河邊找鬼送爸。 笑死铛嘱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袭厂。 我是一名探鬼主播墨吓,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼纹磺!你這毒婦竟也來(lái)了帖烘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤橄杨,失蹤者是張志新(化名)和其女友劉穎秘症,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體式矫,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乡摹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了采转。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聪廉。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氏义,靈堂內(nèi)的尸體忽然破棺而出锄列,到底是詐尸還是另有隱情,我是刑警寧澤惯悠,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站竣况,受9級(jí)特大地震影響克婶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丹泉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一情萤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摹恨,春花似錦筋岛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肪获。三九已至,卻和暖如春柒傻,著一層夾襖步出監(jiān)牢的瞬間孝赫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工红符, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青柄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓预侯,卻偏偏與公主長(zhǎng)得像致开,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萎馅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 注:源碼系列文章主要是對(duì)某付費(fèi)專(zhuān)欄的總結(jié)記錄双戳。如有侵權(quán),請(qǐng)聯(lián)系刪除校坑。 1 static 1.1 靜態(tài)變量 靜態(tài)變量...
    xinxisimple閱讀 150評(píng)論 0 1
  • 一:java概述:1拣技,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境耍目,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,650評(píng)論 0 11
  • 1.import static是Java 5增加的功能,就是將Import類(lèi)中的靜態(tài)方法膏斤,可以作為本類(lèi)的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,222評(píng)論 0 2
  • 此文已經(jīng)同步至個(gè)人站點(diǎn)博客,點(diǎn)擊下方鏈接可以體驗(yàn)更加閱讀模式:《java題庫(kù)》 final,finalize,fi...
    千淘萬(wàn)漉閱讀 4,333評(píng)論 2 2
  • encodeURI只會(huì)對(duì)保留字符邪驮、非轉(zhuǎn)義字符莫辨、#之外的字符進(jìn)行轉(zhuǎn)移,encodeURIComponent就會(huì)對(duì)保留...
    吳晗君閱讀 679評(píng)論 0 0