java靜態內部類的作用


需要了解2個概念:內部類和靜態修飾符static
1)首先,用內部類是因為內部類與所在外部類有一定的關系,往往只有該外部類調用此內部類。所以沒有必要專門用一個Java文件存放這個類。
2)靜態都是用來修飾類的內部成員的。比如靜態方法,靜態成員變量,靜態常量。它唯一的作用就是隨着類的加載(而不是隨着對象的產生)而產生,以致可以用類名+靜態成員名直接獲得。
這樣靜態內部類就可以理解了,因為這個類沒有必要單獨存放一個文件,它一般來說只被所在外部類使用。並且它可以直接被用 外部類名+內部類名 獲得。

非靜態內部類中不能有靜態成員變量。一般情況下,如果一個內部類不是被定義成靜態內部類,那么在定義成員變量或者成員方法的時候,是不能夠被定義成靜態成員變量與靜態成員方法的。也就是說,在非靜態內部類中不可以聲明靜態成員。

如下圖:

 

 

內部類中可以用public,protected,default,private等修飾

 

 

其次,關於靜態方法的線程安全問題

靜態方法如果沒有使用靜態變量,則沒有線程安全問題。
為什么呢?因為靜態方法內聲明的變量,每個線程調用時,都會新創建一份,而不會共用一個存儲單元。比如這里的tmp,每個線程都會創建自己的一份,因此不會有線程安全問題。
注意:靜態變量,由於是在類加載時占用一個存儲區,每個線程都是共用這個存儲區的,所以如果在靜態方法里使用了靜態變量,這就會有線程安全問題!

轉載於:https://www.cnblogs.com/jinsheng1027/p/11412083.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM