Java經常使用關鍵字的原理及用法

 

轉載請註明原文地址:http://www.javashuo.com/article/p-swlupmvf-eu.htmlhtml

 

一:transient

    用途:Java中一個類在定義時若是實現了Serilizable接口,那麼這個類的對象就能夠被序列化。(序列化:把對象內容轉化爲byte數組。反序列化:從byte數組提取信息重構出對象),可是咱們考慮到類中的某些重要屬性(如:密碼)不想被序列化,那麼咱們能夠用transient關鍵字修飾它。java

    用法:在聲明成員變量時做爲修飾符。數組

    舉例:緩存

 private transient InputStream is;

    

 

二:instanceof

    用途:指出對象是不是特定類的一個實例,返回一個布爾值做爲結果,以判斷這個對象是不是這個特定類或者是它的子類的一個實例。this

    用法:result = object instanceof classspa

    舉例:線程

if p instanceof Person:
    ....
else:
    ....

 

三:final

    用途:能夠用於聲明成員變量、方法、類以及靜態變量。final聲明的內容不容許被更改。code

        1)final類:final去修飾一個類的時候,表示這個類不能被繼承,所以就不存在被子類修改的可能了。htm

        2)final方法:父類中定義的被final修飾的方法,不能在子類中被重寫。對象

        3)final變量:必需要在聲明的同時賦予初始值;而且以後不容許更改變量的值(若是修飾的成員變量是基本類型,則表示這個變量的值不能改變;若是修飾的成員變量是一個引用類型,則是說這個引用類型變量所保存的地址不能變,可是這個引用所指向的對象裏面的內容仍是能夠改變的。)

 

四:static

    用途:static的主要做用在於建立獨立於具體對象的域變量或者方法。

    用法:做爲關鍵字用於變量聲明、方法定義、代碼塊前修飾。

    特色:

    1)static能夠修飾變量、方法、代碼塊

    2)被static修飾的內容是獨立於該類的任何對象的,不屬於任何一個實例對象,而是被類的實例對象所共享

    3)在類被加載的時候,就會自動去加載被static修飾的部分

    4)當一個類加載完畢以後,即使沒有建立對象,也能夠去訪問靜態內容

    注意事項:

    1)靜態方法中沒有this關鍵字,由於靜態是隨着類的加載而加載,而this是隨着對象的建立而存在的。

    2)靜態比對象優先存在,所以靜態能夠訪問靜態的內容,可是靜態不能訪問非靜態的內容。

    3)非靜態的能夠去訪問靜態的內容,由於靜態的內容已存在。

 

 

五:volatile

    用途:volatile只能修飾變量。該變量對於全部線程可見,全部做用在該變量上的操做引發變量的值的變化都會第一時間通知到全部使用它的線程。

    原理:每一個線程在使用volatile變量時,若是對變量的值做出了改變,則CPU強制線程馬上把新的值寫入主存中。而其餘線程在使用到這個變量時,不是從緩存中讀取過時值而是直接從主存中讀取最新值。

    用法:修飾成員變量。

 

六:synchronized

    用途:能夠把任何一個非null 對象 做爲"鎖",當synchronized做用在方法上時,鎖住的即是對象實例(this);看成用在靜態方法時鎖住的即是對象對應的Class實例,由於 Class數據存在於永久帶,所以靜態方法鎖至關於該類的一個全局鎖;當synchronized做用於某一代碼域時,鎖住的即是對應的代碼塊。

    原理:syncrhoized實現時使用了自旋鎖,當一個線程進入競爭隊列前,先自旋(等一等看鎖會不會釋放,一旦釋放馬上得到鎖對象),自旋期間線程能夠作一些無心義的操做來實現暫時佔用CPU而不是阻塞。線程自旋超過必定時間還沒得到鎖,就進入競爭隊列被篩選。

    用法:修飾 方法、代碼塊。

    與volatile比較:

    1)volatile比synchronized的使用和執行成本會更低,由於它不會引發線程上下文的切換和調度,也不會引起線程阻塞。

   2)volatile僅能實現變量的修改可見性,但不具有原子特性,而synchronized(和lock)則能夠保證變量的修改可見性和原子性。(原子性:操做不可被分割執行)

 

七:const

    const是java中的預留關鍵字(java中預留關鍵字還有goto),如今沒有做爲關鍵字。常見於C,C++中,相似於Java的final。

   Java中定義常量是經過static final組合來實現的,不是const。

相關文章
相關標籤/搜索