参照型変数を無理矢理使わない
質問:インスタンスを使うためには、必ず参照型変数が必要ですか?
解答:基本的にはそうですが、無理矢理使わない方法もあります。
普通は、インスタンスを操作するために参照型変数が必要になります。
ですが、無理矢理参照型変数を使わずに済ませる方法もあります。必要なのは参照であって、参照型変数ではないからです。
// NoRefVarRunner.java
/**
* フィールド1つだけ持つシンプルなクラス。
* (SimpleClassと同じものです)
*/
class SimpleClass6
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class NoRefVarRunner
{
public static void main( String[] args )
{
// SimpleClass6クラスのインスタンスを作り、
// 返された参照から直接dataフィールドを使用します。
new SimpleClass6().data = 100;
// もっとも、このインスタンスは次の行に移れば使えませんが。
// ちなみにこんなこともできます。
System.out.println( new SimpleClass6().data = 100 );
// 出力結果:
// 100
}
}
/**
* フィールド1つだけ持つシンプルなクラス。
* (SimpleClassと同じものです)
*/
class SimpleClass6
{
// int型変数のフィールドdataを定義します。
int data;
}
/**
* 実行用クラス。このクラスを実行してください。
*/
class NoRefVarRunner
{
public static void main( String[] args )
{
// SimpleClass6クラスのインスタンスを作り、
// 返された参照から直接dataフィールドを使用します。
new SimpleClass6().data = 100;
// もっとも、このインスタンスは次の行に移れば使えませんが。
// ちなみにこんなこともできます。
System.out.println( new SimpleClass6().data = 100 );
// 出力結果:
// 100
}
}
// NoRefVarRunner.java /** * フィールド1つだけ持つシンプルなクラス。 * (SimpleClassと同じものです) */ class SimpleClass6 { // int型変数のフィールドdataを定義します。 int data; } /** * 実行用クラス。このクラスを実行してください。 */ class NoRefVarRunner { public static void main( String[] args ) { // SimpleClass6クラスのインスタンスを作り、 // 返された参照から直接dataフィールドを使用します。 new SimpleClass6().data = 100; // もっとも、このインスタンスは次の行に移れば使えませんが。 // ちなみにこんなこともできます。 System.out.println( new SimpleClass6().data = 100 ); // 出力結果: // 100 } }
このプログラムでは、インスタンスを作って、その時返された参照直接を使ってフィールドを使用しています。
// SimpleClass6クラスのインスタンスを作り、
// 返された参照から直接dataフィールドを使用します。
new SimpleClass6().data = 100;
// 返された参照から直接dataフィールドを使用します。
new SimpleClass6().data = 100;
// SimpleClass6クラスのインスタンスを作り、 // 返された参照から直接dataフィールドを使用します。 new SimpleClass6().data = 100;
「new SimpleClass6()」のようにインスタンスを作ると、参照が返されます。
「返される」ということは、つまり「new SimpleClass6().data」が「参照.data」に置き換わるということです。これは、これまでの「ref.data」といった書き方と同じです。
ただし、参照を参照型変数に取っていませんから、次の行に移ったらもうこのインスタンスを操作することはできません。一回きり、ということです。
フィールドの代わりに、後で説明する「メソッド」を使う場合には使い道がありますが、こんな書き方しても基本的に意味はありません。とりあえず、参照とインスタンスの関係についてより理解するため、こういうことができるんだということを覚えておいてもらうための例です。