除了抛出新的ClassCircularityError(...)
之外,有谁知道如何重现java.lang.ClassCircularityError
?如果可能的话,您能给我看一个总是出现错误的 main()
程序示例吗?
根据Javadoc :
Thrown when the Java Virtual Machine detects a circularity in the superclass hierarchy of a class being loaded.
最佳答案
除非运行时使用的某些库的版本与编译时使用的库的版本不匹配,否则通常不会发生此错误。
您可以使用单独的编译轻松重现错误。
首先,使用以下定义编译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)
关于java - 如何重现 ClassCircularityError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631993/