回答編集履歴
3
修正
answer
CHANGED
@@ -32,7 +32,8 @@
|
|
32
32
|
・メソッド
|
33
33
|
・内部クラス
|
34
34
|
・内部インターフェース
|
35
|
+
・セミコロン
|
35
|
-
0. **
|
36
|
+
0. **initializer** (初期化ブロック)
|
36
37
|
・静的初期化ブロック
|
37
38
|
・非静的初期化ブロック
|
38
39
|
0. **declarations of constructors** (コンストラクタの宣言)
|
2
追記
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
追記
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
|
+
```
|