#pragma twice

KAB-studio > プログラミング > Javaのオブジェクト指向入門 > 2. クラスQ and A > 2.6 インスタンスは参照型変数がないと使えないの?
 
前のページへつぎ

2.6 インスタンスは参照型変数がないと使えないの?

del.icio.us 登録する はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数 livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数 Yahoo!ブックマーク 詳細を表示 users RSSに登録
更新日: 2008/03/31
動作確認環境:Windows XP Professional SP2, Java SE 5

参照型変数を無理矢理使わない

 質問:インスタンスを使うためには、必ず参照型変数が必要ですか?
 解答:基本的にはそうですが、無理矢理使わない方法もあります。

 普通は、インスタンスを操作するために参照型変数が必要になります。
 ですが、無理矢理参照型変数を使わずに済ませる方法もあります。必要なのは参照であって、参照型変数ではないからです。

// 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
    }
}
// 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;
		// SimpleClass6クラスのインスタンスを作り、
		// 返された参照から直接dataフィールドを使用します。
		new SimpleClass6().data = 100;

 「new SimpleClass6()」のようにインスタンスを作ると、参照が返されます。
 「返される」ということは、つまり「new SimpleClass6().data」が「参照.data」に置き換わるということです。これは、これまでの「ref.data」といった書き方と同じです。

 ただし、参照を参照型変数に取っていませんから、次の行に移ったらもうこのインスタンスを操作することはできません。一回きり、ということです。
 フィールドの代わりに、後で説明する「メソッド」を使う場合には使い道がありますが、こんな書き方しても基本的に意味はありません。とりあえず、参照とインスタンスの関係についてより理解するため、こういうことができるんだということを覚えておいてもらうための例です。

2.6 インスタンスは参照型変数がないと使えないの?
このページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。
詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。