JavaA2Z

KAB-studio > プログラミング > JavaA2Z > thisとは

this

日本語 これ
英語 this
ふりがな じす、でぃす
フリガナ ジス、ディス

解説

メソッド内における、そのメソッド呼び出しインスタンスを示す参照変数予約語のひとつ。
「object.method();」という形式で呼び出した場合、method()メソッド内で「object」の参照値が格納されている変数が「this」である。この変数暗黙的に存在し、なにもしなくても必ず存在している。
自分自身を引数に渡す場合や、フィールドと同じローカル変数宣言した場合に明示的フィールドへとアクセスする場合、自分自身と他の参照instanceofで比較する場合等に使用する。
インスタンス経由で呼び出す「普通のメソッド」、つまり「非staticメソッド」の場合にのみ存在する。staticメソッドメソッド内ではthisは存在しない。
 
上記とは別に、メソッドとしての使用方法もある。
コンストラクタ内で「他のコンストラクタ」を呼び出す際に「this();」という書式で使用する。どのコンストラクタが呼ばれるかは引数によって決められる。
書式が全く異なるため、基本的には別物と考えた方が良い。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    /**
    *   フィールド。
    */
    private int data;
    
    public static void main( String[] args )
    {
        // Sampleクラスを作ります。
        Sample sample = new Sample();
        // ここでnewして作られたインスタンスの「参照値」を出力します。
        System.out.println( sample.toString() );
        // Sample@998b08

        // useThis()メソッドを呼び出します。
        sample.useThis();
        
        // 「this」はインスタンスにとっての「自分自身」なので、
        // staticメソッド内では使用できません。
        // this.data = 100;
        // コンパイルエラー:
        // 静的コンテキストでは this を使用できません。
    }

    /**
    *   コンストラクタ1。
    */
    public Sample()
    {
        // thisで別コンストラクタを呼び出します。
        // これでコンストラクタ2が呼び出されます。
        this( 0 );
    }

    /**
    *   コンストラクタ2。
    */
    public Sample( int data )
    {
        // フィールドの変数名もdata、引数の変数名もdata。
        // こういう場合、フィールドの方を明示的に示す場合には
        // thisを使用します。
        this.data = data;
    }

    /**
    *   thisを使うメソッド。
    */
    private void useThis()
    {
        // thisを経由して、フィールドにアクセスします。
        this.data = 200;
        System.out.println( data );
        // 200
        // このように、this.dataは、今メソッドが呼ばれてるインスタンスの
        // dataフィールドです。
        
        // thisの「参照値」を出力します。
        System.out.println( this.toString() );
        // Sample@998b08
        // このように、main()メソッド内で呼んだsample.toString()と同じです。
        // つまり、このthisと、main()メソッド内でnewしたSampleインスタンスは
        // 同じものという事です。

        // 自分自身を渡します。
        useSample( this );
        // こういう場合にはthisでないと無理です。
    }

    /**
    *   Sampleクラスを引数に持つメソッド。
    */
    private void useSample( Sample sample )
    {
        // 引数にはthisが渡されています。
        System.out.println( sample.toString() );
        // Sample@998b08

        // もちろんthisと同じです。
        System.out.println( this.toString() );
        // Sample@998b08

        System.out.println( sample == this );
        // true
    }
}
// Sample.java
public class Sample
{
    /**
    *   フィールド。
    */
    private int data;
    
    public static void main( String[] args )
    {
        // Sampleクラスを作ります。
        Sample sample = new Sample();
        // ここでnewして作られたインスタンスの「参照値」を出力します。
        System.out.println( sample.toString() );
        // Sample@998b08

        // useThis()メソッドを呼び出します。
        sample.useThis();
        
        // 「this」はインスタンスにとっての「自分自身」なので、
        // staticメソッド内では使用できません。
        // this.data = 100;
        // コンパイルエラー:
        // 静的コンテキストでは this を使用できません。
    }

    /**
    *   コンストラクタ1。
    */
    public Sample()
    {
        // thisで別コンストラクタを呼び出します。
        // これでコンストラクタ2が呼び出されます。
        this( 0 );
    }

    /**
    *   コンストラクタ2。
    */
    public Sample( int data )
    {
        // フィールドの変数名もdata、引数の変数名もdata。
        // こういう場合、フィールドの方を明示的に示す場合には
        // thisを使用します。
        this.data = data;
    }

    /**
    *   thisを使うメソッド。
    */
    private void useThis()
    {
        // thisを経由して、フィールドにアクセスします。
        this.data = 200;
        System.out.println( data );
        // 200
        // このように、this.dataは、今メソッドが呼ばれてるインスタンスの
        // dataフィールドです。
        
        // thisの「参照値」を出力します。
        System.out.println( this.toString() );
        // Sample@998b08
        // このように、main()メソッド内で呼んだsample.toString()と同じです。
        // つまり、このthisと、main()メソッド内でnewしたSampleインスタンスは
        // 同じものという事です。

        // 自分自身を渡します。
        useSample( this );
        // こういう場合にはthisでないと無理です。
    }

    /**
    *   Sampleクラスを引数に持つメソッド。
    */
    private void useSample( Sample sample )
    {
        // 引数にはthisが渡されています。
        System.out.println( sample.toString() );
        // Sample@998b08

        // もちろんthisと同じです。
        System.out.println( this.toString() );
        // Sample@998b08

        System.out.println( sample == this );
        // true
    }
}

この単語を含むページ

「みだし」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/02/18
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。