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