Java中的類和資源文件是以二進(jìn)制形式存儲(chǔ)在硬盤中的。為了加載這些文件,Java提供了兩種方式:類的加載和資源的加載。
類加載通過(guò)ClassLoader來(lái)完成,而資源的加載則是從對(duì)應(yīng)的Class對(duì)象中獲取。
Class>clazz = MyClass.class; InputStream is = clazz.getResourceAsStream("myfile.txt");
通過(guò)getResourceAsStream方法可以獲取指定路徑下的資源文件。如果想要獲取資源文件的URL路徑,可以使用getResource方法:
URL url = clazz.getResource("myfile.txt");
一般情況下,如果使用相對(duì)路徑加載資源文件,那么ClassLoader會(huì)從當(dāng)前類的class文件所在的目錄下查找資源文件。如果使用絕對(duì)路徑,則ClassLoader會(huì)從classpath路徑下查找。
而對(duì)于類加載,ClassLoader會(huì)根據(jù)類的全限定名來(lái)查找對(duì)應(yīng)的class文件。ClassLoader提供了三種loadClass方法:
public Class>loadClass(String name) throws ClassNotFoundException; protected Class>findClass(String name) throws ClassNotFoundException; protected Class>loadClass(String name, boolean resolve) throws ClassNotFoundException;
其中l(wèi)oadClass方法是ClassLoader提供的模板方法,主要負(fù)責(zé)委派給父類ClassLoader進(jìn)行加載。findClass方法則由子類進(jìn)行實(shí)現(xiàn),用來(lái)查找class文件。loadClass(name, resolve)則是在加載完class文件后,會(huì)調(diào)用resolveClass方法對(duì)類進(jìn)行解析。