2013-09-26 57 views
-2

我有問題哪些下面的方法,變量,塊加載在java中的類加載時,而不管對象的創建和不通過對象訪問它們?什麼是加載(修飾語,塊,方法)或類之前加載在Java?

1. static variables 
2. static methods 
3. final variables,methods 
4. static blocks 
5. instance ({..... })blocks 
6. main() 
7. constructors (argumented and default) 
8. instance variables 

其中哪些是在java中加載類的時候? (加載的順序不是必需的,我只是想知道什麼是加載之前,或與類加載在Java)

回答

1

當一個類被初始化時,所有的元數據都爲該類加載。但是,使用前一直沒有完成。對於您提到的每個階段,都會在第一次運行時執行。

+0

我的意思是如果有像靜態方法公共靜態void main()和其他靜態方法將被加載第一個主要方法或其他靜態方法? – user2199330

+0

您使用的方法按您使用它們的順序加載。靜態字段將首先被初始化(按它們出現的順序) –

+3

類的每個部分同時被加載*;對於JVM,它只是一個字節數組。沒有加載方法的順序。不應將類加載與* static class initialization *混淆,儘管這會發生在稍後以及靜態字段按文本順序初始化的地方,因爲它們出現在源代碼中。 –

1

當JVM加載一個類,它加載.class文件與它包含的一切,這是所有的你上面列出的是什麼。當然這並不意味着所有這一切都是執行

編輯:它看起來像你認爲類的每個部分(字段,方法等)是不同的部分,並單獨加載。不是這種情況。 .class文件包含所有的類部件,並且它們在加載到內存中時同時加載。也許你的困惑來自於如何使用反射,你有Class,MethodContructor和這樣的類。這些實際上是虛擬部分由JVM在解析.class文件以允許反射等功能時創建的。

+0

實際上沒有與類一起加載,可以直接訪問而無需創建對象? – user2199330

+2

@ user2199330您可以在沒有實例的情況下訪問靜態字段和方法,但您應該已經知道了。也許你可以讓你的觀點更清楚? –

+0

我的意思是如果有一個靜態方法,如公共靜態無效的主要()和其他靜態方法將被加載第一主要方法或其他靜態方法? – user2199330

相關問題