85501


他人のコードを見ています、以下のような知らない使い方がありました：

[code]

        private List<ClassA<ClassB, ClassC>> rules;
        {
            doSomething();
        }
    
[/code]

これはあるクラスの下の定義でした、クラスは何も継承していません。  
一行目は定義だと思いますが、 **;の次に{}のカッコを入れるのはどういう意味でしょうか** ？？

検索エンジンではこの問題をうまく検索出来ませんでした（;{}は特殊表示かもしれません、もしできればこの場合の検索方法も教えていただけたらと思っています）


CC BY-SA 4.0
2022-01-05T08:23:04.130
85498
2022-01-17T11:32:34.423
2022-01-17T11:32:34.423
41314
41314
question
java android java8
Java8の中;{}の使い方について聞きたいです。


インスタンス生成時に「useProductionRules();」が実行されます。  
コンストラクタの実行の前に実行されるため、コンストラクタが複数ある場合など共通の初期処理を実行したいときに使うのだと思います。

> 検索エンジンではこの問題をうまく検索出来ませんでした（;{}は特殊表示かもしれません、もしできればこの場合の検索方法も教えていただけたらと思っています）

「初期化ブロック」や「object initialization block」で検索すると見つかります。


CC BY-SA 4.0
2022-01-05T09:11:48.210
85501
2022-01-05T09:24:09.017
2022-01-05T09:24:09.017
35558
35558
85498
answer


ご質問の「;の次に{}のカッコを入れるのはどういう意味でしょうか？？」への補足をいたしますと、  
「`rules;`フィールドと`{}`の初期化ブロックには何の関係もないため、順番に意味は有りません」という回答になります。

下記のサンプルコードでは`int fuga;`の次に初期化ブロックを配置しています。  
空白行とコメントをはさむと上記の2つに何の関係もないことが分かりやすいのではないでしょうか。

[code]

    public class Sample {
        private String hoge;
        private int fuga;
    
        // 上のフィールドとは何の関係もない初期化ブロック
        {
            System.out.println("初期化ブロックが呼ばれました。");
        }
    
        // コンストラクタ
        public Sample() {
            System.out.println("コンストラクタが呼ばれました。");
        }
    
        public static void main(String[] args) {
            new Sample();
        }
    }
    /* 実行結果:
    初期化ブロックが呼ばれました。
    コンストラクタが呼ばれました。
    */
    
[/code]


CC BY-SA 4.0
2022-01-05T09:29:20.037
85502
2022-01-05T12:39:38.913
2022-01-05T12:39:38.913
9820
9820
85498
answer