次のエディターは、Java の非静的メンバー変数の無限ループに関する記事 (詳細な説明) を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして一緒に見てみましょう
1. 非静的メンバー変数
メンバー変数が非静的で現在のクラスがインスタンス化されると、無限ループが発生します
例:
public class ConstructorCls { private ConstructorCls obj=new ConstructorCls(); }
public class TestC { public static void main(String[] args) { ConstructorCls c =new ConstructorCls(); } }
結果:
Exception in thread "main" java.lang.StackOverflowError at com.ConstructorCls.<init>(ConstructorCls.java:7) at com.ConstructorCls.<init>(ConstructorCls.java:7) at com.ConstructorCls.<init>(ConstructorCls.java:7)
分析: 新しい ConstrutorCls() が ConstrutorCls をインスタンス化し、メンバーを初期化するときこのクラスの obj 再度、クラスインスタンス化され、これは StackOverflowError
2 まで続きます。 静的メンバー変数
静的メンバー変数はクラスに属しており、無限ループは発生しません
例:
public class ConstructorCls { private static ConstructorCls obj=new ConstructorCls(); }
public class TestC { public static void main(String[] args) { ConstructorCls c =new ConstructorCls(); } }
分析: 新しい ConstructorCls() の場合、まず ConstructorCls を JVM に追加し、ロード時にクラスの静的メンバーを初期化し (ロード時に 1 回のみ初期化されます)、obj オブジェクトを初期化し、新しい ConstructorCls を作成しますここで重要な点は、この静的メンバーはクラスに属しており、特定のインスタンス オブジェクトに属していないため、無限ループが発生しないということです。
以上がJavaの非静的メンバー変数の無限ループについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。