質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

1026閲覧

Javaでのthis

Yhaya

総合スコア439

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/12/31 11:08

以下のコードで、thisは何を指しているのでしょうか。

Java

1class Element { 2 public Element nextElement; 3 void addToList( List list ) { 4 list.addToList( this ); 5 } 6} 7class List { 8 void addToList( Element element ) { 9 ... 10 element.nextElement = getNextElement(); 11 } 12}

thisはローカル変数とインスタンス変数を区別するために使うと学んだのですが、この用法もその一種なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

thisの示すものは、「当該メソッド(ここではvoid addToList( List list )のこと)に対応するインスタンス」となります。

例えば、このメソッドが実行される際に事前に行われていることを考えます。まず、どこかでElementクラスのインスタンス(仮にeとします)が作られ、e.addToList(なんとか)という処理を実行することで、このメソッドが開始されます。ここで、このメソッドの中でthisはeのことを示します。

投稿2017/12/31 12:16

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もう十分な説明があると思いますが、自分の復習も含めて書いてみます。

同じ名前なのはわかりにくいうえ、そもそも名前が悪いと思いますので、少し変えます。

class Element { void addToList( List list ) { list.addElem( this ); } } class List { void addElem( Element element ) { ... } }

上記を踏まえて以下

Element instanceOfElement = new Element(); List list = new List(); instanceOfElement.addToList(list); // ① list.AddElem(instanceOfElement); // ②

①のaddToListの中で、list.addElem(this);が呼ばれます。
これは、②とまったく同一の結果を生みます。
つまり、thisはメソッド呼び出しの際の.(ドット)より前にあるインスタンスを指します。
(①のaddToListであれば、instanceOfElementを指します。)
よく、「自分自身を指す」といわれるのは、メソッド呼び出しの「instanceOfElement.addToList(...)」という記述が、「instanceOfElement」というインスタンスが持つ振る舞い、「addToList」を実行するという意味だからですね。

投稿2017/12/31 12:50

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1Element element = new Element(); 2List<Element> list = new ArrayList<>(); 3list.add(element);

上のコードはわかりますね?
この最後のリストへの追加をElementのメソッドaddToNextで行いたい場合、つまり

java

1element.addToNext(list);

とする場合に、メソッド内でthisはelementに相当します。

投稿2017/12/31 12:10

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

thisは自分自身を指すものです。
インスタンスが自分自身を参照するときに使います。

ローカル変数とインスタンス変数を区別するために使うと学んだ

そのように使うこともありますね。
this.hogeと書くことで、おいらのhogeだぞと明確に出来るためです。


過去に同様の質問がありました。やはりthisのイメージは掴みづらいですね。

投稿2017/12/31 11:24

編集2017/12/31 12:01
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yhaya

2017/12/31 11:35

自分自身ということは、ここでは「list」を指しているということですか?
LouiS0616

2017/12/31 11:36

いえ、Elementのインスタンスを指しています。
Yhaya

2017/12/31 11:47

物分りが悪くてすみません。このコードでの「List list」と「Element element」はどのような関係にあるのでしょうか?
LouiS0616

2017/12/31 11:59 編集

Elementのインスタンスelem、Listのインスタンスlistがあるとします。 elemのメソッドaddToListにlistを渡すと、そのlistのメソッドaddToListにelemが渡され、elemのインスタンス変数nextElementが参照されます。 煩雑ですね。これはコードが良くないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問