|
||||||||||||||||||||||||
|
初期化ブロック - 変数の初期化 (2/3)変数の初期化の基本については、初期化の基本 - 変数の初期化 (1/2) で説明しました。 ここでは C++ 等には存在せずに Java に特徴的な 初期化ブロック (Initialization block) について説明します。 初期化ブロックの種類初期化ブロックには、次の二つがあります。
以上、二つについて実行例をみてみましょう。 オブジェクト初期化ブロックオブジェクト毎に変数を初期化するには、次のように初期化ブロックを利用することもできます。 public class InitBlock1 { public static void main(String[] args) { InitBlock b = new InitBlock(); b.printValue(); } } class InitBlock { int x = 2; int y = 3; int z; // オブジェクト初期化ブロック { z = x * y; } public void printValue() { System.out.format( "x=%d, y=%d, z=%d", x, y, z ); } } 実行例は次のとおりです。 x=2, y=3, z=6 オブジェクト作成時に、オブジェクト初期化ブロックが実行されたために、変数 z が正しく 6 に初期化されていることがわかります。 静的初期化ブロックオブジェクト毎ではなく、クラスのロード時に一度だけ変数を初期化する場合には、次のように static 付きの初期化ブロックを利用することもできます。 import java.util.Random; public class InitBlock2 { public static void main(String[] args) { InitBlock b1 = new InitBlock(); b1.printValue(); InitBlock b2 = new InitBlock(); b2.printValue(); } } class InitBlock { static int x; int y; // 静的初期化ブロック static { Random gen = new Random(); x = gen.nextInt( 100 ); } // オブジェクト初期化ブロック { y = x; x++; } public void printValue() { System.out.format( "x=%d, y=%d\n", x, y ); } } 実行例は次のとおりです。 x=100, y=99 x=101, y=100 1行目、2行目はそれぞれ別のオブジェクトからの出力ですが、確かに x が共通して使われていることがわかります。 さて、以上、コンストラクタやら初期化ブロックやらと、いろいろと出てきましたが、 これらは一体どのような順序で呼ばれ、どう使ったらよいのでしょうか? 次の資料では、初期化の順序について説明します。
|
|
© 2010 Java 入門 |
|||||||||||||||||||||