是否有人知道如何重现除java.lang.ClassCircularityError
以外的throw new ClassCircularityError(...)
?如果可能的话,你能告诉我一个总是出现错误的示例main()
程序吗?
根据Javadoc:
当Java虚拟机在正在加载的类的超类层次结构中检测到循环时抛出。
答案 0 :(得分:2)
除非运行时使用的某些库版本与用于编译的库版本不匹配,否则通常不会发生此错误。
您可以使用单独的编译轻松重现错误。
首先,使用以下定义编译A.java
:
class B {}
class A extends B {}
然后使用反向类层次结构编译B.java
:
class A {}
class B extends A {}
最后,将第一个编译中的A.class
与第二个编译中的B.class
组合。之后,尝试运行任一类将导致
Exception in thread "main" java.lang.ClassCircularityError: A
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)