ホームページ >Java >&#&チュートリアル >Javaの非静的メンバー変数の無限ループについて詳しく解説

Javaの非静的メンバー変数の無限ループについて詳しく解説

黄舟
黄舟オリジナル
2017-09-23 10:18:521637ブラウズ

次のエディターは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。