【Java】this について

# this
Java(というよりプログラミングにおいて)の **this** について学んだことのアウトプットです。

## thisとは

**「this」** とはクラスの中（[メソッド]内）で[インスタンス]
を扱うための特殊な変数です。

「自クラスの[インスタンス]であることを明示的に指し示す機能」を持ちます。

## なぜ、thisをつかうのか
結論からいうと理由は

- **「ローカル変数と[フィールド変数]を明確に区別するため」**。

**ローカル変数と [フィールド変数] は別々のものなので、同じ名前でも作ることが可能**なため、同じ名前で使われたときに**どっちなのかわからなくなってしまいます。**そのために、
**「[フィールド変数]にはthisをつける」** という書き方がよく使われます。

## どこに、 thisをつかうのか
上にも書きましたが、**「this を使う場所** は **[フィールド変数]名の 頭**です

```
例：this.フィールド名
```

また、this は **[クラス]内の[メソッド]の定義の中でのみ使用できます。**
thisは[メソッド]が呼ばれた時に、その[メソッド]を呼び出している[インスタンス]に置き換えられます。

## thisを使ってみる
ポケモン図鑑をプログラムしてみました。
Pokemon.java の中で [フィールド変数] を定義し、それを[クラス]内で **this** をつけて使いまわしているのがわかるかと思います。

```java
//【Pokemon.java】
public class Pokemon {
    // フィールド変数
    public int number;
    public String name;
    public String category;
    public String type;
    public String description;

    public Pokemon(int number, String name, String category, String type, String description) {
        this.number = number;
        this.name = name;
        this.category = category;
        this.type = type;
        this.description = description;
    }

}

```
こちらが呼び出し側の[クラス]です。

```java
//【Main.java】
public class Main {

    public static void main(String[] args) {
        // 呼び出し（new した後で、引数へ与えられた値を元に Pokemon が生成されます）
        Pokemon pikachu = new Pokemon(025, "ピカチュウ", "ねずみポケモン", "でんき",
                "つくる　でんきが　きょうりょくな　ピカチュウほど　ほっぺの　ふくろは　やわらかく　よく　のびるぞ");

        // 使用時
        System.out.print("No." + pikachu.number);
        System.out.println(" " + pikachu.name);
        System.out.print(pikachu.category);
        System.out.println(" " + pikachu.type + "タイプ");
        System.out.println(pikachu.description);

    }
}
```
実行結果

```
No.21 ピカチュウ
ねずみポケモン でんきタイプ
つくる　でんきが　きょうりょくな　ピカチュウほど　ほっぺの　ふくろは　やわらかく　よく　のびるぞ
```


## 参考文献・記事

- [Javaのローカル変数とグローバル変数の概念とは【初心者向け】]
- [Progate]
- [ドットインストール]

[Javaのローカル変数とグローバル変数の概念とは【初心者向け】]:https://techacademy.jp/magazine/19485
[Progate]:https://prog-8.com/
[ドットインストール]:https://dotinstall.com/



[インスタンス]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[フィールド変数]:https://qiita.com/takahirocook/items/28df75a133049a74ece1
[new演算子]:https://qiita.com/takahirocook/items/00f9f97592bf50831d39
[カプセル化]:https://qiita.com/takahirocook/items/e469a7c0539a0012868e
[クラス]:https://qiita.com/takahirocook/items/50cbbdca8e21539170e9
[メソッド]:https://qiita.com/takahirocook/items/5bfe43576d87a2a4006c
[mainメソッド]:https://qiita.com/takahirocook/items/f4635915337303de338c
[メソッドの呼び出し]:https://qiita.com/takahirocook/items/f4635915337303de338c
[コンストラクタ]:https://qiita.com/takahirocook/items/fa1822f2f22c3786593e
[引数]:https://qiita.com/takahirocook/items/5e5b0ba79e869f4a592e
[戻り値]:https://qiita.com/takahirocook/items/3b6fa670a1d6dd4a9386
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538
[getter・setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[setter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[getter]:https://qiita.com/takahirocook/items/27828bc8477735612021
[オブジェクト指向]:https://qiita.com/takahirocook/items/041ba7a096b71ab8ffd4
[継承]:https://qiita.com/takahirocook/items/6c84ea66a6e2ad536a37
[オーバーライド]:https://qiita.com/takahirocook/items/09dd8e5f56d6617ce45a
[オーバーロード]:https://qiita.com/takahirocook/items/b937c3c07126fe7e02a4
[this]:https://qiita.com/takahirocook/items/d251ec4693c68f6b9538