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