Duplicate :
|
|
Relates :
|
|
Relates :
|
When a class has been loaded with sun.invoke.anon.AnonymousClassLoader, the seventeenth invocation of Class.newInstance() on that class fails with a NoClassDefFoundError. Example: import java.io.ByteArrayOutputStream; import java.io.InputStream; import sun.invoke.anon.AnonymousClassLoader; public class AnonClassTest { public static void main(String[] args) throws Exception { AnonymousClassLoader loader = new AnonymousClassLoader(); Class c = loader.loadClass(readClassFile()); for (int i = 0; i < 20; i++) { System.out.println(i + ": " + c.newInstance()); } } private static byte[] readClassFile() throws Exception { try (InputStream in = AnonClassTest.class.getResourceAsStream("AnonClassTest.class"); ByteArrayOutputStream out = new ByteArrayOutputStream()) { int b; while ((b = in.read()) != -1) { out.write(b); } return out.toByteArray(); } } } Which produces the following output: 0: AnonClassTest/28180264@4ad14c 1: AnonClassTest/28180264@1f2e41d 2: AnonClassTest/28180264@15e4dbe 3: AnonClassTest/28180264@420e44 4: AnonClassTest/28180264@b6a5fb 5: AnonClassTest/28180264@14b1fda 6: AnonClassTest/28180264@1183871 7: AnonClassTest/28180264@12192a9 8: AnonClassTest/28180264@123ce3f 9: AnonClassTest/28180264@1b98cbb 10: AnonClassTest/28180264@c68351 11: AnonClassTest/28180264@d76237 12: AnonClassTest/28180264@7148e9 13: AnonClassTest/28180264@169c9a2 14: AnonClassTest/28180264@34e2cc 15: AnonClassTest/28180264@1b0edb2 Exception in thread "main" java.lang.NoClassDefFoundError: AnonClassTest/28180264 at sun.reflect.GeneratedConstructorAccessor1.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at java.lang.Class.newInstance0(Class.java:372) at java.lang.Class.newInstance(Class.java:325) at AnonClassTest.main(AnonClassTest.java:11) Caused by: java.lang.ClassNotFoundException: AnonClassTest.28180264 at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 6 more
|