jvm加載包名和類名相同的類的規則,以及如何加載包名和類名相同的類(轉)


jvm包括三種類加載器:

第一種:bootstrap classloader:加載java的核心類。

第二種:extension classloader:負責加載jre的擴展目錄中的jar包。

第三種:它負責在JVM被啟動時,加載來自在命令java中的-classpath或者java.class.path系統屬性或者 CLASSPATH操作系統屬性所指定的JAR類包和類路徑。

以上參考博客原文路徑為:http://blog.csdn.net/xrt95050/article/details/4413998

jvm 加載包名和類名相同的類時,先加載classpath中jar路徑放在前面的,包名類名都相同,那jvm沒法區分了,如果使用ide一般情況下是會提示發生沖突而報錯,若不報錯,只有第一個包被引入(在classpath路徑下排在前面的包),第二個包會在classloader加載類時判斷重復而忽略。

 

如果加載包名和類型相同的類可以使用不同的類加載器,也就是說使用自定義類加載器加載同包同名的類。

 

今天在使用slf4j和logback時,由於以前的log4j包也存在,導致配置有時候不成功,marker一下。

 

注:slf4j:simple logging facade 4 java:簡單日志外觀4java:意即使用外觀模式的日志實現類。實現可以使用log4j、logback等等實現了org.slf4j.impl包下的binder的日志類。使用slf4j,可以方便的在這些日志實現類中切換。


免責聲明!

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



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