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

黄舟
リリース: 2017-09-23 10:18:52
オリジナル
1612 人が閲覧しました

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート