Java中的類和資源文件是以二進制形式存儲在硬盤中的。為了加載這些文件,Java提供了兩種方式:類的加載和資源的加載。
類加載通過ClassLoader來完成,而資源的加載則是從對應的Class對象中獲取。
Class>clazz = MyClass.class; InputStream is = clazz.getResourceAsStream("myfile.txt");
通過getResourceAsStream方法可以獲取指定路徑下的資源文件。如果想要獲取資源文件的URL路徑,可以使用getResource方法:
URL url = clazz.getResource("myfile.txt");
一般情況下,如果使用相對路徑加載資源文件,那么ClassLoader會從當前類的class文件所在的目錄下查找資源文件。如果使用絕對路徑,則ClassLoader會從classpath路徑下查找。
而對于類加載,ClassLoader會根據類的全限定名來查找對應的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;
其中loadClass方法是ClassLoader提供的模板方法,主要負責委派給父類ClassLoader進行加載。findClass方法則由子類進行實現,用來查找class文件。loadClass(name, resolve)則是在加載完class文件后,會調用resolveClass方法對類進行解析。