参照型変数とインスタンスをまとめて作る
質問:クラスを作るときに「int i = 100;」みたいにできないの?
解答:できます。
前の章では参照とインスタンスを別々に作っていました。
// SimpleClassRunner.java
/**
* フィールド1つだけ持つシンプルなクラス。
*/
class SimpleClass
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class SimpleClassRunner
{
public static void main( String[] args )
{
// SimpleClassクラスの参照型変数refを作ります。
SimpleClass ref;
// SimpleClassクラスのインスタンスを作り、
// その参照をref変数に入れます。
ref = new SimpleClass();
// ref変数内の参照を通して、SimpleClassクラスの
// インスタンスに入っているdataフィールドに
// 数値を入れます。
ref.data = 100;
// 今度はそれを取り出して出力します。
System.out.println( ref.data );
// 出力結果:
// 100
}
}
/**
* フィールド1つだけ持つシンプルなクラス。
*/
class SimpleClass
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class SimpleClassRunner
{
public static void main( String[] args )
{
// SimpleClassクラスの参照型変数refを作ります。
SimpleClass ref;
// SimpleClassクラスのインスタンスを作り、
// その参照をref変数に入れます。
ref = new SimpleClass();
// ref変数内の参照を通して、SimpleClassクラスの
// インスタンスに入っているdataフィールドに
// 数値を入れます。
ref.data = 100;
// 今度はそれを取り出して出力します。
System.out.println( ref.data );
// 出力結果:
// 100
}
}
// SimpleClassRunner.java /** * フィールド1つだけ持つシンプルなクラス。 */ class SimpleClass { // int型変数のフィールドdataを定義します。 int data; } /** * 実行用クラス。このクラスを実行してください。 */ class SimpleClassRunner { public static void main( String[] args ) { // SimpleClassクラスの参照型変数refを作ります。 SimpleClass ref; // SimpleClassクラスのインスタンスを作り、 // その参照をref変数に入れます。 ref = new SimpleClass(); // ref変数内の参照を通して、SimpleClassクラスの // インスタンスに入っているdataフィールドに // 数値を入れます。 ref.data = 100; // 今度はそれを取り出して出力します。 System.out.println( ref.data ); // 出力結果: // 100 } }
でも、一緒に作ることもできます。
// RefAndInstanceRunner.java
/**
* フィールド1つだけ持つシンプルなクラス。
* (SimpleClassと同じものです)
*/
class SimpleClass2
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class RefAndInstanceRunner
{
public static void main( String[] args )
{
// SimpleClass2クラスの参照型変数refを作り、同時に
// SimpleClass2クラスのインスタンスを作って、
// インスタンスへの参照をrefに入れます。
SimpleClass2 ref = new SimpleClass2();
// あとは同じように使えます。
ref.data = 100;
System.out.println( ref.data );
// 出力結果:
// 100
}
}
/**
* フィールド1つだけ持つシンプルなクラス。
* (SimpleClassと同じものです)
*/
class SimpleClass2
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class RefAndInstanceRunner
{
public static void main( String[] args )
{
// SimpleClass2クラスの参照型変数refを作り、同時に
// SimpleClass2クラスのインスタンスを作って、
// インスタンスへの参照をrefに入れます。
SimpleClass2 ref = new SimpleClass2();
// あとは同じように使えます。
ref.data = 100;
System.out.println( ref.data );
// 出力結果:
// 100
}
}
// RefAndInstanceRunner.java /** * フィールド1つだけ持つシンプルなクラス。 * (SimpleClassと同じものです) */ class SimpleClass2 { // int型変数のフィールドdataを定義します。 int data; } /** * 実行用クラス。このクラスを実行してください。 */ class RefAndInstanceRunner { public static void main( String[] args ) { // SimpleClass2クラスの参照型変数refを作り、同時に // SimpleClass2クラスのインスタンスを作って、 // インスタンスへの参照をrefに入れます。 SimpleClass2 ref = new SimpleClass2(); // あとは同じように使えます。 ref.data = 100; System.out.println( ref.data ); // 出力結果: // 100 } }
これは、単に別々にしていたものを一緒にしただけです。
つまり、
SimpleClass2 ref;
ref = new SimpleClass2();
ref = new SimpleClass2();
SimpleClass2 ref; ref = new SimpleClass2();
を、
SimpleClass2 ref = new SimpleClass2();
SimpleClass2 ref = new SimpleClass2();
と書いただけです。
していることに違いはないので、どちらの方法でも構いません。