static初期化ブロックと初期化ブロックのサンプルです。
staticイニシャライザとインスタンスイニシャライザとも呼ばれます。
目次
static初期化ブロック(staticイニシャライザ)
| static{ } |
- static初期化ブロックは、以下の時に実行されます。
→staticメソッドやstatic変数に最初にアクセスした時
→クラスのインスタンスを最初に生成する時 - static初期化ブロックは、staticイニシャライザとも呼ばれます。
- 「{」(波括弧) から「}」までをブロックと言います。
- Java staticメソッドとstatic変数のサンプル
- Java クラスのサンプル
コード
static初期化ブロックのサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
Sample.print1();
}
}
class Sample {
static final int num1;
// static初期化ブロック
static{
num1 = 1;
}
static void print1() {
System.out.println(num1); //1
}
}
5行目は、16行目のstaticメソッドを実行します。
その時に12-14行目のstatic初期化ブロックが実行され、変数num1に1がセットされます。
17行目で1が出力されます。
初期化ブロック(インスタンスイニシャライザ)
| { } |
- インスタンスが生成されるごとに実行されるブロックです。
- 初期化ブロックは、インスタンスイニシャライザとも呼ばれます。
- 「{」(波括弧) から「}」までをブロックと言います。
コード
初期化ブロックのサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
Sample s1 = new Sample();
s1.print1();
}
}
class Sample {
int num2;
// 初期化ブロック
{
num2 = 2;
}
void print1() {
System.out.println(num2); //2
}
}
5行目は、9行目のクラスのインスタンスを生成しています。
その時に13-15行目の初期化ブロックが実行され、変数num2に2がセットされます。
6行目のメソッドを実行すると2が出力されます。
static初期化ブロックと初期化ブロックが実行される順番
実行される順番は以下のとおりです。
1.static初期化ブロックが実行されます。クラスが呼ばれる1回目のみ実行されます。
2.初期化ブロックが実行されます。クラスのインスタンスが生成される毎に実行されます。
3.コンストラクタが実行されます。クラスのインスタンスが生成される毎に実行されます。
コード
実行する順番のサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
new Sample(); // 111 222 333
new Sample(); // 222 333
}
}
class Sample{
// static初期化ブロック
static{
System.out.println("111");;
}
// 初期化ブロック
{
System.out.println("222");;
}
// コンストラクタ
Sample() {
System.out.println("333");
}
}
5行目のクラスのインスタンス生成時は、static初期化ブロック、初期化ブロック、コンストラクタの順番で実行されます。111,222,333が出力されます。
6行目のクラスのインスタンス生成時は、初期化ブロック、コンストラクタの順番で実行されます。222,333が出力されます。static初期化ブロックは実行されません。
関連の記事
Java コンストラクタのサンプル
Java staticメソッドとstatic変数のサンプル
Java staticインポートのサンプル
Java final修飾子のサンプル