java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...
Java自定義的類加載器,java自定義加載,在java中類加載器有以
在java中類加載器有以下幾種java虛擬機自帶的加載器 1)根類加載器(Bootstrap,c++實現)2)擴展類加載器(Extension,java實現) 3) 系統類加載器(System,java實現)用戶自定義的類加載器 java.lang.ClassLoader的子類 用戶可以定制類的加載方式
Java自定義類加載器package classloader;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;/** * * 一、ClassLoader加載類的順序 * 1.調用 findLoadedClass(String) 來檢查是否已經加載類。 * 2.在父類加載器上調用 loadClass 方法。如果父類加載器為 null,則使用虛擬機的內置類加載器。 * 3.調用 findClass(String) 方法查找類。 * 二、實現自己的類加載器 * 1.獲取類的class文件的字節數組 * 2.將字節數組轉換為Class類的實例 * * * @author lei 2011-9-1 */public class ClassLoaderTest { public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException { //新建一個類加載器 MyClassLoader cl = new MyClassLoader("myClassLoader"); //加載類,得到Class對象 Class> clazz = cl.loadClass("classloader.Animal"); //得到類的實例 Animal animal=(Animal) clazz.newInstance(); animal.say(); }}class Animal{ public void say(){ System.out.println("hello world!"); }}class MyClassLoader extends ClassLoader { //類加載器的名稱 private String name; //類存放的路徑 private String path = "E:\\workspace\\Algorithm\\src"; MyClassLoader(String name) { this.name = name; } MyClassLoader(ClassLoader parent, String name) { super(parent); this.name = name; } /** * 重寫findClass方法 */ @Override public Class> findClass(String name) { byte[] data = loadClassData(name); return this.defineClass(name, data, 0, data.length); } public byte[] loadClassData(String name) { try { name = name.replace(".", "//"); FileInputStream is = new FileInputStream(new File(path + name + ".class")); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int b = 0; while ((b = is.read()) != -1) { baos.write(b); } return baos.toByteArray(); } catch (Exception e) { e.printStackTrace(); } return null; }}
總結
以上是生活随笔為你收集整理的java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php适合响应式吗,响应式和自适应
- 下一篇: java美元兑换,(Java实现) 美元