teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正

2019/04/29 13:39

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -32,7 +32,8 @@
32
32
  ・メソッド
33
33
  ・内部クラス
34
34
  ・内部インターフェース
35
+ ・セミコロン
35
- 0. **instance initializers** (初期化ブロック)
36
+ 0. **initializer** (初期化ブロック)
36
37
  ・静的初期化ブロック
37
38
  ・非静的初期化ブロック
38
39
  0. **declarations of constructors** (コンストラクタの宣言)

2

追記

2019/04/29 13:39

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,4 +1,4 @@
1
- 端的に言えばJava仕様です。
1
+ 端的に言えばJava仕様です。
2
2
  せっかくの機会なので、真面目に言語仕様を紐解いて回答してみます。
3
3
 
4
4
  ---
@@ -49,4 +49,6 @@
49
49
  age = 33;
50
50
  }
51
51
  }
52
- ```
52
+ ```
53
+
54
+ 少し複雑な条件で初期化したい際にしばしば使われます。

1

追記

2019/04/29 09:41

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,4 +1,5 @@
1
+ 端的に言えばJava仕様です。
1
- せっかくの機会なので、言語仕様を紐解いて回答してみます。
2
+ せっかくの機会なので、真面目に言語仕様を紐解いて回答してみます。
2
3
 
3
4
  ---
4
5
  [Java Language Specification - Chapter 8. Classes](https://docs.oracle.com/javase/specs/jls/se12/html/jls-8.html#jls-8.1.6)には、次のように書いてあります。
@@ -36,4 +37,16 @@
36
37
  ・非静的初期化ブロック
37
38
  0. **declarations of constructors** (コンストラクタの宣言)
38
39
 
39
- 依って、代入文(厳密に言えば代入式の式文)を置くことはできません。
40
+ 依って、代入文(厳密に言えば代入式の式文)を置くことはできません。
41
+
42
+ ---
43
+ なお、初期化ブロックを利用して次のように書くことは可能です。
44
+ 初期化ブロックはインスタンスが作られるとき、コンストラクタより先に呼ばれます。
45
+ ```Java
46
+ public class Human {
47
+ int age;
48
+ {
49
+ age = 33;
50
+ }
51
+ }
52
+ ```