1、final關(guān)鍵字final關(guān)鍵字可用于修飾類、方法以及變量。 修飾類:該類不能被繼承,該類的所有方法和成員都被隱式地指定為final。 修飾方法:鎖定方法,任何繼承類都不能修改他,所有的private方法都被隱式地指定為final方法。 修飾變量:若修飾的變量為基本數(shù)據(jù)類型,該變量值被賦值后不可改變;若修飾的變量為引用類型的變量,該變量被初始化后不可再被定義指向另一個(gè)對(duì)象,但指向的對(duì)象的內(nèi)容是可變的。 2、static變量“全局”或者“靜態(tài)”的意思,給類使用而不是給對(duì)象使用。 被static修飾的方法或變量,無(wú)須依賴對(duì)象實(shí)例去訪問(wèn),只要類被加載了就可以通過(guò)類名直接去訪問(wèn)。原因:Java程序創(chuàng)建時(shí),在類首次被加載時(shí)會(huì)優(yōu)先執(zhí)行static變量、方法或代碼塊,并為其分配固定的內(nèi)存區(qū)域,JVM可以直接訪問(wèn)到他們,而不需要依賴某個(gè)特定的實(shí)例變量,并被類的所有實(shí)例共享。 修飾變量:靜態(tài)變量被所有的對(duì)象所共享,在內(nèi)存中只有一副本,當(dāng)且僅當(dāng)類初次加載時(shí)被初始化。 修飾方法:靜態(tài)方法不依賴于任何對(duì)象就可以被訪問(wèn),直接類名.方法名可以直接訪問(wèn)。因此,靜態(tài)方法中不能訪問(wèn)非靜態(tài)方法或非靜態(tài)變量。工具類? 修飾代碼塊:同理,僅執(zhí)行一次,提高代碼效率。 注:static作用于成員變量用來(lái)表示只保存一份副本,而final的作用是用來(lái)保證變量不可變。 3、public/private/protected關(guān)鍵字public修飾符:任何類都可以訪問(wèn) private修飾符:訪問(wèn)權(quán)限僅限于類內(nèi)部 protected修飾符:類及其子類或同一個(gè)包下的類可以訪問(wèn) 4、finally關(guān)鍵字finally總是會(huì)被執(zhí)行,正常在try語(yǔ)句后,拋異常在catch語(yǔ)句后,除非前序語(yǔ)句中有System.exit(0)。 finally中return會(huì)修改try或catch中return的變量值嗎? 返回基本類型是值,返回引用類型是指向某個(gè)對(duì)象的地址;基礎(chǔ)類型被分配在棧中,對(duì)象分配在堆中。如果返回的是基本類型,直接復(fù)制一個(gè)變量返回,finally塊中的代碼不會(huì)影響到返回結(jié)果;若返回值是引用類型,finally語(yǔ)句塊可以修改其指向?qū)ο蟮闹怠?/p> 5、throw/throws關(guān)鍵字throw 函數(shù)體,用于語(yǔ)句拋出異常,一般會(huì)用于程序出現(xiàn)某種邏輯時(shí)程序員主動(dòng)拋出某種特定類型的異常。 throws 函數(shù)頭,用于方法可能拋出異常的申明,聲明方法時(shí)跟上throws,交給上層處理拋出的異常。 6、transient關(guān)鍵字一個(gè)對(duì)象實(shí)現(xiàn)了Serializable接口,該對(duì)象就會(huì)序列化。若是某些屬性不希望被序列化(如密碼),可以在該屬性前加transient修飾。如此,該字段的生命周期僅存在于調(diào)用者的內(nèi)存中而不會(huì)被寫(xiě)到磁盤(pán)中持久化。 靜態(tài)變量不管是否被transient修飾都不會(huì)被序列化。 在Java中,對(duì)象的序列化可以通過(guò)實(shí)現(xiàn)兩種接口來(lái)實(shí)現(xiàn),若實(shí)現(xiàn)的是Serializable接口,則所有的序列化將會(huì)自動(dòng)進(jìn)行,若實(shí)現(xiàn)的是Externalizable接口,則沒(méi)有任何東西可以自動(dòng)序列化,需要在writeExternal方法中進(jìn)行手工指定所要序列化的變量,這與是否被transient修飾無(wú)關(guān)。 7、synchronized關(guān)鍵字synchronized 同步鎖,使用鎖的機(jī)制實(shí)現(xiàn)同步。 修飾一個(gè)代碼塊,同步代碼塊,作用對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象,指定對(duì)象加鎖。 修飾一個(gè)方法,同步方法,作用對(duì)象是調(diào)用這個(gè)方法的對(duì)象,當(dāng)前實(shí)例加鎖。 修飾一個(gè)靜態(tài)方法,作用對(duì)象是這個(gè)類的所有對(duì)象,當(dāng)前類對(duì)象加鎖。 修飾一個(gè)類,作用對(duì)象是這個(gè)類的所有對(duì)象,當(dāng)前類對(duì)象加鎖。 兩個(gè)并發(fā)進(jìn)程訪問(wèn)同一個(gè)對(duì)象object中的synchronized(this)同步代碼時(shí),一個(gè)時(shí)間內(nèi)只有一個(gè)線程得到執(zhí)行,另一個(gè)線程必須等到該線程執(zhí)行完該代碼塊才可以執(zhí)行。 當(dāng)一個(gè)線程訪問(wèn)一個(gè)對(duì)象object中的synchronized(this)同步代碼時(shí),另一個(gè)線程可以訪問(wèn)該object的非同步代碼塊。 當(dāng)一個(gè)線程訪問(wèn)一個(gè)對(duì)象object中的synchronized(this)同步代碼時(shí),其他線程對(duì)該object對(duì)象中的其他同步代碼塊的訪問(wèn)也被阻塞。 對(duì)象鎖 注:使用該關(guān)鍵字,需要注意是否是對(duì)同一個(gè)對(duì)象加鎖,對(duì)于靜態(tài)方法或者是類,該類的所有對(duì)象同一把鎖。 8、volatile關(guān)鍵字修飾變量 保證不同線程對(duì)于這個(gè)變量進(jìn)行操作時(shí)的可見(jiàn)性,即一個(gè)線程修改了該變量的值,該新值對(duì)于其他線程是立即可見(jiàn)的。如果是寫(xiě)操作,會(huì)導(dǎo)致其他CPU中對(duì)應(yīng)的緩存行無(wú)效,需要到主存中讀取該變量的值。 禁止進(jìn)行指令重排序。 加入volatile關(guān)鍵字會(huì)多一個(gè)lock前綴指令,相當(dāng)于一個(gè)內(nèi)存屏障,可以保證指令重排序不會(huì)穿過(guò)屏障。 強(qiáng)制將對(duì)緩存的修改操作立即寫(xiě)入主存。 來(lái)源:https://www./content-1-258551.html |
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》