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

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

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

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

Q&A

解決済

6回答

14417閲覧

Javaでthisが必要な場合

lupus_dingo

総合スコア257

Java

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

0グッド

0クリップ

投稿2016/08/11 12:24

編集2016/08/31 15:12

お世話になってます。

私の認識ではthisはメソッド内変数とフィールドを区別するために使用すると思っているのですが、あっているでしょうか?

それ以外はthisは余計でしょうか?

追記
「メソッドに付いているthisが不要である」ということが一番知りたかったので
maisumakunさんをベストアンサーにさせていただきました。
質問には記載していませんでした。すみません。
皆さんありがとうございました。

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

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

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

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

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

guest

回答6

0

ベストアンサー

ほかにthisを使う場面としては、以下のようなものがあります。

  • 他のメソッドへの引数や返り値など、何かへ与える値としてthisを使う場合
  • コンストラクタから同じクラスの別なコンストラクタを呼ぶ時のthis(引数);記法
  • インナークラスから外部クラスを参照する場合の外部クラス名.thisの記法

メソッドをthis.付きで呼ぶこともできはしますが、特に意味はありません。

投稿2016/08/11 12:45

maisumakun

総合スコア145183

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

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

intelf___

2016/08/11 13:08 編集

3つ目を実際に記述すると、「リリース8から'this'は受信タイプのパラメータ名としてのみ許可され、最初のパラメータにする必要があります」 と表示されるので、JDK8ではコンパイルできない可能性があります。 (記述方法が間違ってたらすみません)
lupus_dingo

2016/08/31 15:07

回答ありがとうございます。参考にさせていただきます。
guest

0

メソッド内で宣言した変数と
メソッド外で宣言した変数を使い分けるために
thisを使いますので大体、ご認識は正しいと
思います。

具体的には
thisを付けない:メソッドで宣言した変数
thisを付ける :クラスで宣言した変数

使用例も含めてこのサイトに書かれていますので
確認のために一読されてはいかがでしょうか?

http://sasuke.main.jp/thistukau.html

投稿2016/08/31 15:19

Yatsurugi

総合スコア1628

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

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

lupus_dingo

2016/08/31 15:24

回答ありがとうございます。 URL参考にさせていただきます。
guest

0

メソッド内変数とフィールドを区別するために使用すると思っているのですが、あっているでしょうか?

それだけではないですが、あっています。

例えば、クラスが入れ子になった場合にはつけないといけない場合があります。
これはちょっと難しい話なのでここでは省かせていただきます。

あとはコーディングスタイルの問題かと。

私は冗長だと思うのであまりつけません。
メソッドはたぶん必ず付けません。

フィールドは、setterの場合は変数名が被るので付けます。これは変数名が被らないように名前を変えるより明快だと思うからです。名前に_をつけるスタイルがありますが、私は好きじゃないです。
あとは、コンストラクターでフィールドを初期化する際にもつけます。
要は、フィールドへの代入の場合は付けるようにしています。

投稿2016/08/11 12:42

編集2016/08/11 12:45
argius

総合スコア9388

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

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

lupus_dingo

2016/08/31 15:07

回答ありがとうございます。参考にさせていただきます。
guest

0

thisの他の用途は他の人の回答が参考になります。
変数に限って言えば、そのような理解で問題ないでしょう。
例えば以下のような場合

Java

1public class Sample { 2 3 private String str = "instance"; 4 5 private void foo() { 6 System.out.println(str); 7 } 8}

fooを呼ぶと当然 instance と表示されるわけですが、
以下のようにこのコードを他の人が不用意に手を加えてしまった場合

Java

1public class Sample { 2 3 private String str = "instance"; 4 5 private void foo() { 6 String str = "local"; 7 System.out.println(str); 8 } 9}

local と表示されるようになってしまい、最初の実装者の意図に反します。
なので、フィールドを見たい場合は this をつけておいた方が安全と言えば安全なので、
僕はけっこう this はつけます。

このコードは短いのでこんなことあり得ないと思うかもしれませんが、
本格的なコードになってきた場合、何も考えずに他人のコードをさわっていると、
こういうことが起きたりします。

かぶるような適当な変数名を使っていなければ、そうそう起きないとは思いますが、
たまに理解の限界を超える行為を平気でしてくる技術者もいるので、チーム開発は怖いです。。。

投稿2016/08/12 01:37

root_jp

総合スコア4666

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

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

lupus_dingo

2016/08/31 15:07

回答ありがとうございます。参考にさせていただきます。
guest

0

thisは自分自身のオブジェクトを指します。
相手に、そのクラスのオブジェクトを渡すときにも使います。

java

1TextView text = new TextView(this);

上の例はAndroidで、自クラスのオブジェクトを外部が生成してメソッドを呼び出すのでこのような形が必須になります。

また、コンストラクタなどでメンバ変数に値を設定する際にわざと同じ名前にしてミスを防ぐというのはよく使われます。

java

1class A{ 2 int i; 3 String str; 4 A(int i, String str){ 5 this.i = i; 6 this.str = str; 7 } 8}

投稿2016/08/11 13:01

intelf___

総合スコア868

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

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

lupus_dingo

2016/08/31 15:07

回答ありがとうございます。参考にさせていただきます。
guest

0

大体の場合におけるthisの使い方は他の回答者から出ているので、ほかの使い方としては…
equalsやcompareToの様に、引数に自分と同じ型が来て、それぞれの同名のメンバを参照する際に、どっちがどっちかを明示する目的で付けることはあります。

java

1public boolean equals(Object o) { 2 // 型などの条件判断略 3 Type anObj = (Type)o; 4 return this.str.equals(anObj.str); 5}

投稿2016/09/01 01:20

swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問