2016-01-11 18 views
2

假設我有一個帶有一些「Utils」類的Java項目,並且這些類只有static方法和成員。靜態方法是否總是加載到內存中?

一旦我運行我的應用程序,那些方法和成員會自動加載到內存中嗎?或者只有當我沿着代碼調用類時纔會發生這種情況?

編輯:一些示例代碼來說明我的問題。

RandomUtils.java

public class RandomUtils { 

    private static Random rand = new Random(); 

    public static int randInt(int min, int max) { 
     // nextInt is normally exclusive of the top value, 
     // so add 1 to make it inclusive 
     return rand.nextInt((max - min) + 1) + min; 
    } 
} 

MainClass.java

public class MainClass { 
     public static void main(String[] args) { 
      // Some other operations. Is my class already loaded here? 

      int randomNumber = RandomUtils.randInt(1,10); // Or is it only loaded here? 
     } 
} 

如果這個類有其他靜態成員和方法,如果只加載一次,我調用一個什麼他們,其他方法也加載?

+2

Downvoter,你能解釋一下有什麼問題嗎? – Mauker

+1

有關一般性討論,請參閱:http://javarevisited.blogspot.com/2012/07/when-class-loading-initialization-java-example.html – mhp

回答

3

靜態方法(以及非靜態方法和靜態/成員變量)不會直接加載到內存中:聲明類會全部加載到內存中,包括所有已聲明的方法和字段。因此,加載靜態/非靜態方法/字段的方式沒有區別。

類只在第一次被其他代碼引用時才由類加載器加載。這構成了Initialization on demand idiom的基礎。

+0

所以唯一真正的區別是我不需要爲此創建一個對象,對吧? – Mauker

+0

您不需要創建該類的*實例*,不需要。 –

+0

我的意思是,'static'和'non-static'都會在調用並實例化的內存中完全加載Class,對吧? – Mauker

1

靜態方法只在調用類時加載一次。 enter image description here

大學=「ITS」是一個靜態變量

+5

該圖旨在表明什麼? –

+0

college是一個靜態變量,當您調用該類時僅加載一次 –

+0

它如何顯示?什麼是「學院」實際用於?是否有意圖在圖表中附帶一些代碼? –

0

它發生,一旦你調用類的。

2

您的課程在第一次調用static方法時(除其他條件外)加載。見reference

相關問題