Class的getResource方法,實(shí)際上是靠調(diào)入這個類的ClassLoader的getResource方法來實(shí)現(xiàn)的,如果調(diào)入這個類的ClassLoader是原生的BootStrap ClassLoader,這個ClassLoader是用C++寫成的,在Java中沒有相對應(yīng)的物件。這時(shí)候的實(shí)現(xiàn)靠的是ClassLoader的靜態(tài)方法getSystemResource。
只有當(dāng)使用Class類的getResource方法的時(shí)候,才會有下面介紹的那種算法。
這種算法就是說,如果你指定的路徑以/開頭,那么就是從ClassPath的起點(diǎn)開始尋找這個路徑。如果直接以某個名字開頭,那么就是從當(dāng)前包名的目錄為起點(diǎn)開始尋找。
所以大家如果用過hibernate就知道,有些表示類到數(shù)據(jù)庫表的映射關(guān)系的xml文件就和這個類的class文件放在一起,這樣它就直接使用這個類.class.getResource方法來得到這個xml文件。
而在使用ClassLoader的getResource方法的時(shí)候,永遠(yuǎn)是以Classpath為直接起點(diǎn)開始尋找資源的。不用擔(dān)心從什么包開始尋找的問題。
用Class.getResource不加/就是從當(dāng)前包開始找,用ClassLoader.getResource不加/就是直接從Classpath的起點(diǎn)開始尋找。
當(dāng)然,如果覺得麻煩,你定位資源的時(shí)候全部都使用/開頭的方式就好了
只有當(dāng)使用Class類的getResource方法的時(shí)候,才會有下面介紹的那種算法。
這種算法就是說,如果你指定的路徑以/開頭,那么就是從ClassPath的起點(diǎn)開始尋找這個路徑。如果直接以某個名字開頭,那么就是從當(dāng)前包名的目錄為起點(diǎn)開始尋找。
所以大家如果用過hibernate就知道,有些表示類到數(shù)據(jù)庫表的映射關(guān)系的xml文件就和這個類的class文件放在一起,這樣它就直接使用這個類.class.getResource方法來得到這個xml文件。
而在使用ClassLoader的getResource方法的時(shí)候,永遠(yuǎn)是以Classpath為直接起點(diǎn)開始尋找資源的。不用擔(dān)心從什么包開始尋找的問題。
用Class.getResource不加/就是從當(dāng)前包開始找,用ClassLoader.getResource不加/就是直接從Classpath的起點(diǎn)開始尋找。
當(dāng)然,如果覺得麻煩,你定位資源的時(shí)候全部都使用/開頭的方式就好了