天天看點

java類加載過程(java類加載過程)

Java加載類的機制是怎樣的?

  sun。com/developer /TechTips/2000/tt1027。html

Writing Your Own Class Loader

The loadClass method of the ClassLoader superclass takes care of the delegation to

the parent and calls findClass only if the class hasn't already been loaded and

if the parent class loader was unable to load the class。

什麼是java類加載機制?

  getParent方法傳回的是上級類加載器

ExtClassLoader,但是,從類檔案的觀念看,他們不是繼承關系,隻能看做引用關系

在加載的時候,如果在我這一層,首先會去找父親,看看他加載了沒,父親再找父親的父親加載了沒,

沒有才一步步下來,最後由我自己加載,這裡講父親,不是父類!,有點子債父還的意思

好處是安全,因為classLoader也是個類,是以如果不用這個機制,想解析一個很簡單的類,寫病毒的人可以自己寫個classLoader用來解析這些本來系統自帶的ClassLoader就可以解析的類在裡面加點病毒代碼,這樣解析一些簡單的類的時候,它會去找加載器,找到了我自己寫的病毒Classloader,如果加載的話就出事了,java這個體系,它即使找到了病毒Classloader,也不會立刻使用,它會往上找如果他的長輩(系統自帶的能解析這個類的ClassLoader)能加載,就由系統解決了,就用不上這個病毒ClassLoader類了,是以說,比較安全!。

java中類的加載是在什麼時候做的

樓上的負責一點好麼,類加載是在編譯的時候?加載一個類需要用到加載器,

你程式都沒運作,jvm都沒啟動,哪來的加載器,你拿什麼去加載一個類?

類加載的時候是運作程式時 它就加載了,至于編譯,你用IDE,是你一儲存,它就給編譯好了。執行個體化的時候,

如:class A

A a = new A();這個時候會被加載這個問題java的比較核心的一個難題,我就針對問題做簡要回答,不做深入讨論了:

1、編譯和運作概念要搞清:編譯即javac的過程,負責将.java檔案compile成.class檔案,主要是類型、格式檢查與編譯成位元組碼檔案,而加載是指java *的過程,将.class檔案加載到記憶體中去解釋執行,即運作的時候才會有加載一說。

2、類的加載時機,肯定是在運作時,但并不是一次性全部加載,而是按需動态,依靠反射來實作動态加載,一般來說一個class隻會被加載一次,之後就會從jvm的class執行個體的緩存中擷取,誰用誰取就可以了,不會再去檔案系統中加載.class檔案了。

明白1,2點就夠了,再深入要等一段才能明白了。

java類的加載順序??

父類到子類