類的命名空間
- 每個類加載器都有自己的命名空間翩剪,命名空間由該加載器及所有父加載器所加載的類組成乳怎。
- 在同一個命名空間中,不會出現(xiàn)類的完整名字(包括類的包中)相同的兩個類前弯。
- 在不同的命名空間中蚪缀,有可能會出現(xiàn)類的完整名字(包括類的包名)相同的兩個類。
關(guān)于命名空間的重要說明
1.子加載器所加載的類能夠訪問父加載器所加載的類
2.父加載器所加載的類無法訪問到子加載器所加載的類
類的卸載
- 當(dāng)MySample類被加載恕出、連接和初始化后询枚,它的生命周期就開始了。當(dāng)代表MySample類的Class對象不再被引用浙巫,即不可觸及時金蜀,Class對象就會結(jié)束生命周期,MySample類的方法區(qū)內(nèi)的數(shù)據(jù)也會被卸載狈醉,從而結(jié)束Sample類的生命周期廉油。
- 一個類何時結(jié)束生命周期惠险,取決于代表它的Class對象何時結(jié)束生命周期苗傅。
- 由Java虛擬機(jī)自帶的類加載器所加載的類,在虛擬機(jī)的生命周期中班巩,始終不會被卸載渣慕,前面已經(jīng)介紹過,Java虛擬機(jī)自帶的類加載器包括根類加載器抱慌、擴(kuò)展類加載器和系統(tǒng)類加載器逊桦。Java虛擬機(jī)本身會始終引用這些類加載器,而這些類加載器則會始終引用他們所加載的類的Class對象抑进,因此這些Class對象始終可觸及的强经。
- 由用戶自定義的類加載器所加載的類是可以被卸載的。
- Sample類由loader1加載寺渗。在類加載器的內(nèi)部實(shí)現(xiàn)中匿情,用一個Java集合來存放所加載類的引用兰迫。另一方面,一個Class對象總是會引用它的類加載器炬称,調(diào)用Class對象的getClassLoader()方法汁果,就能獲得它的類加載器。由此可見玲躯,代表Sample類的Class實(shí)例與loader1之間為雙向關(guān)聯(lián)關(guān)系据德。
- 一個類的實(shí)例總是引用代表這個類的Class對象。在Object類中定義了getClass()方法跷车,這個方法返回代表對象所屬類的Class對象的引用棘利。此處,所有的Java類都有一個靜態(tài)屬性class朽缴,它的引用代表了這個類的Class對象赡译。