0

JVM仕様の第2版を読んでいます。このセクション ( Loading ) では、 ClassCircularityError は、それが独自のスーパークラスまたはスーパーインターフェースである場合にクラスをロードできなかった場合にスローされるように定義されています。そのようなクラスをコンパイルすると、Javaコンパイラがそこで停止し、先に進めないため、理解できませんでした.次に、そのような.classを作成してロードできますか?

public class TestCycle extends TestCycle{
private String memberVar;
}

誰か私のジャーヘッドにこれを説明してくれませんか?

4

2 に答える 2

3

Java では、コンパイルの単位はクラスであるため、クラスが異なる時点でコンパイルされている可能性は十分にあります。検討:

class A {}

じゃあ別人

class B {}

ここで、A の作成者は、B を拡張することを決定します。

class A extends B {}

B の作成者は、A を拡張することを決定しますが、以前の変更を認識していません。つまり、まだ A の元の定義を持っています。

class B extends A{}

その後、A の新しいバージョンが利用可能であることに気付き、それをクラスパスに配置すると、読み込み時に ClassCircularityError が発生します。

于 2012-05-26T10:19:51.600 に答える
1

クラスファイルを直接編集することで、そのようなクラスファイルを作成できます(本当にしたい場合)。したがって、コンパイルされませんが、そのようなクラスを含む有効なクラスファイルを作成できます。そのため、JVM もそれをチェックします。

于 2012-05-26T10:19:56.403 に答える