Java のインスタンス初期化子について話しましょう

黄舟
リリース: 2017-02-07 11:00:58
オリジナル
1231 人が閲覧しました

この記事では、まずインスタンス変数初期化子、インスタンス初期化子、静的初期化子とは何かを説明する例を示します。次に、インスタンス初期化子がどのように動作するかを見てみましょう。

1. 実行順序

まず、次のコードを見てください。どの部分が最初に実行されると思いますか?

public class Foo {
  
    //instance variable initializer 实例变量初始化器
    String s = "abc";
  
    //constructor 构造函数
    public Foo() {
        System.out.println("constructor called");
    }
  
    //static initializer   静态初始化器
    static {
        System.out.println("static initializer called");
    }
  
    //instance initializer 实例变量初始化器
    {
        System.out.println("instance initializer called");
    }
  
    public static void main(String[] args) {
        new Foo();
        new Foo();
    }
}
ログイン後にコピー

出力は次のとおりです:

static initializer called
instance initializer called
constructor called
instance initializer called
constructor called
ログイン後にコピー

2. Java のインスタンス初期化子はどのように機能しますか?

上記の例のインスタンス初期化子には、文字を出力するコードが含まれています。仕組みを理解するには、変数の代入のプロセスをイメージすると理解するのは難しくありません。

次のように値を割り当てることに加えて:

int b = 0;
ログイン後にコピー

、次のように書くこともできます:

int b;
b = 0;
ログイン後にコピー

したがって、インスタンス初期化子とインスタンス変数初期化子は非常に似ています。

3. インスタンス初期化子はいつ使用されますか?

強度初期化子が使用できる機会は比較的少ないです。ただし、場合によっては、インスタンス変数初期化子の代わりに、次のような代替手段が存在することがあります。

  • 初期化コードは例外を処理する必要がある

  • インスタンス変数では実行できない計算を実行する


もちろん、これらは要件は依然としてコンストラクターで実装できます。ただし、クラスに複数のコンストラクターがある場合は、各コンストラクターで同じコードを繰り返す必要があります。


インスタンス初期化子に書かれたコードは、どのコンストラクターを使用しても、インスタンス初期化子内のコードが実行されます (もっと言うかもしれませんが、あまり使われないかもしれません)。


インスタンス初期化子のもう 1 つのアプリケーション シナリオは、匿名の内部クラスです。この場合、コンストラクターをまったく作成できないためです。 (これはログ コードを配置するのに適した場所かもしれません。)

上記は Java のインスタンス初期化子の内容に関するもので、さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!