java自定义类加载器

it2025-07-18  3

import java.io.*; public class MyClassLoader extends ClassLoader{ private String loaderName; //类加载器名称 private String path = ""; private final String fileType = ".class"; public MyClassLoader(String name){ super(); this.loaderName = name; } public MyClassLoader(ClassLoader parent,String name){ super(parent); this.loaderName = name; } public String getPath(){return this.path;} public void setPath(String path){this.path = path;} @Override public String toString(){return this.loaderName;} @Override public Class<?> findClass(String name) throws ClassNotFoundException{ byte[] data = loaderClassdata(name); return this.defineClass(name, data, 0, data.length); } private byte[] loaderClassdata(String name){ InputStream is = null; byte[] data = null; ByteArrayOutputStream bouts = new ByteArrayOutputStream(); try { is = new FileInputStream(new File(path + name + fileType)); int c = 0; while(-1 != (c = is.read())){ bouts.write(c); } data = bouts.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally{ try { if(is != null) is.close(); if(bouts != null) bouts.close(); } catch (IOException e) { e.printStackTrace(); } } return data; } }

    自定义类加载器,也就是从java自身类库的ClassLoader继承一个类出来;

然后在程序中使用;    下面代码需要包含 java.lang.reflect.Field和Method;

加载在目录下已经存在的test1.class; 

import java.lang.reflect.Field; import java.lang.reflect.Method; public class client { public static void main(String[] args) { MyClassLoader myCLoader = new MyClassLoader("MyClassLoader"); myCLoader.setPath("S:\\43\\javaprj\\"); Class<?> clazz; try { clazz = myCLoader.loadClass("test1"); Field[] filed = clazz.getFields(); //获取加载类的属性字段 Method[] methods = clazz.getMethods(); //获取加载类的方法字段 System.out.println("该类的类加载器为:" + clazz.getClassLoader()); System.out.println("该类的类加载器的父类为:" + clazz.getClassLoader().getParent()); System.out.println("该类的名称为:" + clazz.getName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

运行如下;

只是加载自己的class,没有干其他;

最新回复(0)