private byte[] getData(String className) { String path = classPath+className; try { InputStream is = new FileInputStream(path); ByteArrayOutputStream stream = new ByteArrayOutputStream(); byte[] buffer = new byte[2048]; int num = 0; while((num = is.read(buffer))!=-1) { stream.write(buffer,0,num); } return stream.toByteArray(); } catch(IOException e) { e.printStackTrace(); } return null; }
public static void main(String[] args) { try { String path = "D:/workspace_jee/JavaTest/src/classloader/"; ClassReloader reloader = new ClassReloader(path); Class r = reloader.findClass("SingleClass.class"); System.out.println(r.newInstance()); // ClassReloader reloader2 = new ClassReloader(path); Class r2 = reloader.findClass("SingleClass.class"); System.out.println(r2.newInstance()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { e.printStackTrace(); } } }
这段代码的运行结果为:
java.lang.LinkageError: loader (instance of classloader/ClassReloader): attempted duplicate class definition for name: "classloader/SingleClass" at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at classloader.ClassReloader.findClass(ClassReloader.java:26) at classloader.ClassReloader.main(ClassReloader.java:62)