インスタンス初期化子
日本語 | 実体初期化子 |
英語 | instance initializer |
ふりがな | いんすたんすしょきかし |
フリガナ | インスタンスショキカシ |
コンストラクタの前に呼び出されるメソッド。
クラス内に、何も修飾せず「{ 実装 }」と記述することで、コンストラクタが呼び出される前にメソッドとして呼び出される。これが「インスタンス初期化子」である。
この機能により「コンストラクタ共通の初期化処理」を行うことができるが、何も修飾しない「{}」が見慣れないものであること、コンストラクタの前に初期化が行われるという点に違和感があること、コンストラクタだけで十分間に合うということから、あまり使用されていない。
static初期化子に似ているが、static初期化子は「クラスを使用した」時点で呼ばれ、その後は呼び出されない。コンストラクタと結びついて呼び出されるインスタンス初期化子とは異なるものである。
クラス内に、何も修飾せず「{ 実装 }」と記述することで、コンストラクタが呼び出される前にメソッドとして呼び出される。これが「インスタンス初期化子」である。
この機能により「コンストラクタ共通の初期化処理」を行うことができるが、何も修飾しない「{}」が見慣れないものであること、コンストラクタの前に初期化が行われるという点に違和感があること、コンストラクタだけで十分間に合うということから、あまり使用されていない。
static初期化子に似ているが、static初期化子は「クラスを使用した」時点で呼ばれ、その後は呼び出されない。コンストラクタと結びついて呼び出されるインスタンス初期化子とは異なるものである。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
// フィールドの宣言。
private int data = callHere( "フィールドを初期化します。" );
/**
* インスタンス初期化子。
* コンストラクタの前に呼び出される、
* メソッドのようなものです。
*/
{
System.out.println( "Sample.{}" );
data = 100;
}
/**
* 引数なしコンストラクタ。
*/
public Sample()
{
System.out.println( "Sample.Sample() : " + data );
}
/**
* 引数ありコンストラクタ。
*/
public Sample( int i )
{
System.out.println( "Sample.Sample( int )" + data );
}
public static void main( String[] args )
{
Sample sample;
// インスタンス初期化子は、フィールドの初期化の後で、
// かつコンストラクタの前に呼び出されます。
sample = new Sample();
// フィールドを初期化します。
// Sample.{}
// Sample.Sample() : 100
sample = new Sample( 100 );
// フィールドを初期化します。
// Sample.{}
// Sample.Sample( int )100
}
/**
* フィールドの初期化タイミングを調べるためのメソッド。
*/
private static int callHere( String string )
{
System.out.println( string );
return 0;
}
}
public class Sample
{
// フィールドの宣言。
private int data = callHere( "フィールドを初期化します。" );
/**
* インスタンス初期化子。
* コンストラクタの前に呼び出される、
* メソッドのようなものです。
*/
{
System.out.println( "Sample.{}" );
data = 100;
}
/**
* 引数なしコンストラクタ。
*/
public Sample()
{
System.out.println( "Sample.Sample() : " + data );
}
/**
* 引数ありコンストラクタ。
*/
public Sample( int i )
{
System.out.println( "Sample.Sample( int )" + data );
}
public static void main( String[] args )
{
Sample sample;
// インスタンス初期化子は、フィールドの初期化の後で、
// かつコンストラクタの前に呼び出されます。
sample = new Sample();
// フィールドを初期化します。
// Sample.{}
// Sample.Sample() : 100
sample = new Sample( 100 );
// フィールドを初期化します。
// Sample.{}
// Sample.Sample( int )100
}
/**
* フィールドの初期化タイミングを調べるためのメソッド。
*/
private static int callHere( String string )
{
System.out.println( string );
return 0;
}
}
// Sample.java public class Sample { // フィールドの宣言。 private int data = callHere( "フィールドを初期化します。" ); /** * インスタンス初期化子。 * コンストラクタの前に呼び出される、 * メソッドのようなものです。 */ { System.out.println( "Sample.{}" ); data = 100; } /** * 引数なしコンストラクタ。 */ public Sample() { System.out.println( "Sample.Sample() : " + data ); } /** * 引数ありコンストラクタ。 */ public Sample( int i ) { System.out.println( "Sample.Sample( int )" + data ); } public static void main( String[] args ) { Sample sample; // インスタンス初期化子は、フィールドの初期化の後で、 // かつコンストラクタの前に呼び出されます。 sample = new Sample(); // フィールドを初期化します。 // Sample.{} // Sample.Sample() : 100 sample = new Sample( 100 ); // フィールドを初期化します。 // Sample.{} // Sample.Sample( int )100 } /** * フィールドの初期化タイミングを調べるためのメソッド。 */ private static int callHere( String string ) { System.out.println( string ); return 0; } }