2017-06-19 37 views
1

有誰知道如何複製java.lang.ClassCircularityError以外的throw new ClassCircularityError(...)?如果可能,你能告訴我一個例子main()程序總是出現錯誤嗎?如何複製ClassCircularityError

根據Javadoc

當Java虛擬機檢測類的超類層次的圓形加載時拋出。

+1

可能的複製[ClassCircularityError通過ClassLoader.defineClass拋出(https://stackoverflow.com/questions/6179533/classcircularityerror-thrown-by-classloader- defineclass)(也許) – Carcigenicate

+0

如果可能,我想知道總是發生錯誤的情況。 –

+0

鏈接問題的答案提到導致錯誤的原因。這不足以重現它嗎? – Carcigenicate

回答

1

這個錯誤通常不會發生,除非運行時使用的某些庫的版本與用於編譯的庫的版本不匹配。

您可以使用單獨的編譯輕鬆地重現錯誤。

首先,編譯A.java具有以下定義:

class B {} 
class A extends B {} 

然後編譯B.java與反向類層次結構:

class A {} 
class B extends A {} 

最後,從第一次編譯與B.class從第二彙編結合A.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) 
+0

謝謝。我會嘗試。 –