Java中用import導入類和用Class方法加載類有什麼區別?

諺檎ZgKt6463


import僅僅包含導入操作,並不包含將字節碼文件加載進內存這一動作,將字節碼文件加載進內存是後續的實例化操作完成的。例如通過import導入了一堆包和類,但是後續什麼都沒用(沒用實例化),那麼導入的東西是不會被加載進內存的。而且import是編譯期的,如果你在後續代碼中沒有使用到你導入的內容,那麼import語句甚至不會編譯和執行。查看字節碼文件可以看出,import的作用就是對你程序中要用到(實例)的東西進行署名(signature),當程序運行的時候好知道你實例化的對象的類的字節碼文件去哪裡找。

而Class.forName方法包含的動作是:根據給出的全類名(方法的參數)找到對應的字節碼文件,並將字節碼文件通過ClassLoader加載進內存中生成Class類對象(方法的返回值就是Class類對象)。

這些就是二者的區別了。


JavaLeader


當年自己也是碼農一個,後來學習沒跟上,現在落後很多了。05年學的java,題主主要說加載這個事吧,

加載類是jvm的事情 : jvm將class文讀取到內存中,經過對class文件的校驗、轉換解析、初始化最終在jvm的heap和方法區分配內存形成可以被jvm直接使用的類型的過程。

import導入是你這個類需要其他的類因此需要導入包名+類名 , java自帶的 java.lang包下類不需要導入直接用就可以



分享到:


相關文章: