this
日本語 | これ |
英語 | this |
ふりがな | じす、でぃす |
フリガナ | ジス、ディス |
メソッド内における、そのメソッドを呼び出したインスタンスを示す参照型変数。予約語のひとつ。
「object.method();」という形式で呼び出した場合、method()メソッド内で「object」の参照値が格納されている変数が「this」である。この変数は暗黙的に存在し、なにもしなくても必ず存在している。
自分自身を引数に渡す場合や、フィールドと同じローカル変数を宣言した場合に明示的にフィールドへとアクセスする場合、自分自身と他の参照をinstanceofで比較する場合等に使用する。
インスタンス経由で呼び出す「普通のメソッド」、つまり「非staticメソッド」の場合にのみ存在する。staticメソッドメソッド内ではthisは存在しない。
上記とは別に、メソッドとしての使用方法もある。
コンストラクタ内で「他のコンストラクタ」を呼び出す際に「this();」という書式で使用する。どのコンストラクタが呼ばれるかは引数によって決められる。
書式が全く異なるため、基本的には別物と考えた方が良い。
「object.method();」という形式で呼び出した場合、method()メソッド内で「object」の参照値が格納されている変数が「this」である。この変数は暗黙的に存在し、なにもしなくても必ず存在している。
自分自身を引数に渡す場合や、フィールドと同じローカル変数を宣言した場合に明示的にフィールドへとアクセスする場合、自分自身と他の参照をinstanceofで比較する場合等に使用する。
インスタンス経由で呼び出す「普通のメソッド」、つまり「非staticメソッド」の場合にのみ存在する。staticメソッドメソッド内ではthisは存在しない。
上記とは別に、メソッドとしての使用方法もある。
コンストラクタ内で「他のコンストラクタ」を呼び出す際に「this();」という書式で使用する。どのコンストラクタが呼ばれるかは引数によって決められる。
書式が全く異なるため、基本的には別物と考えた方が良い。
参考サイト
- (参考サイトはありません)
// 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
}
}
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 } }
「みだし」に含まれているページ
「解説」に含まれているページ
「サンプルプログラムとか」に含まれているページ
- 127.0.0.1
- <jsp:useBean>
- ]
- AWT
- Class
- classフィールド
- clone
- Comparable
- compareTo
- DTD
- equals
- Frame
- getter
- getter/setter
- GUI
- HttpServletRequest
- JavaBeans
- JSP暗黙オブジェクト「request」
- JSP暗黙オブジェクト「session」
- JTree
- localhost
- MVC
- ObjectInputStream
- ObjectOutputStream
- PipedInputStream
- PipedOutputStream
- PipedReader
- PipedWriter
- privateフィールド
- Runnable
- Serializable
- ServletException
- setter
- super
- superフィールド
- synchronizedブロック
- synchronizedメソッド
- TCP
- this
- Thread
- transient
- UDP
- whileステートメント
- アクセサー
- イントロスペクション
- エラーハンドラ
- カスタムタグライブラリ
- カプセル化
- カレント
- クライアント
- クライアントサーバーシステム
- コントローラー
- コンポジション
- サーバー
- ジェネリッククラス
- セッションスコープ
- ソケット
- ダイアログ
- デッドロック
- ビュー
- フィールド
- フィールド宣言
- フォーカス
- メタ
- メッセージボックス
- モデル
- モーダルダイアログ
- モードレスダイアログ
- リクエストスコープ
- ロック
- 二項演算子
- 内部クラス
- 再描画
- 同期
- 委譲
- 安定ソート
- 排他
- 木構造
- 浅いコピー
- 深いコピー
- 直列化
- 隠蔽
- 集約