Menu
Coddy logo textTech

thisキーワード

CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 4/87。

thisキーワードは、クラスの現在のインスタンスを指します。これは、同じ名前を持つフィールドとパラメータを区別します。

this がないと、引数がフィールドを隠してしまいます(シャドウイング)。

public class Person {
    private String name;
    
    public Person(String name) {
        name = name;  // 引数自身に代入してしまいます!
    }
}

this を使用して値を正しく代入する

public class Person {
    private String name;
    
    public Person(String name) {
        this.name = name;  // パラメータをフィールドに代入する
    }
    
    public String getName() {
        return this.name;
    }
}

メソッド内での this の使用

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getDescription() {
        return this.name + " is " + this.age + " years old";
    }
}

thisキーワードは常に現在のオブジェクトを指します。パラメータ名がフィールド名と一致する場合に不可欠であり、混乱やバグを防ぎます。

challenge icon

チャレンジ

中級

thisキーワードを使用して、フィールドとパラメータを区別するようにPersonクラスを完成させてください:

  • thisを使用してパラメータをフィールドに代入するコンストラクタ
  • thisを使用してフィールドにアクセスするゲッターメソッド
  • "<name>, age <age>, from <city>"を返すgetDescription()メソッド

チートシート

thisキーワードは、クラスの現在のインスタンスを指し、同じ名前を持つフィールドとパラメータを区別します。

thisがない場合、パラメータがフィールドをシャドウイング(隠蔽)します:

public Person(String name) {
    name = name;  // パラメータを自分自身に代入しています!
}

thisを使用して値を正しく代入する:

public Person(String name) {
    this.name = name;  // パラメータをフィールドに代入します
}

ゲッターメソッドでthisを使用する:

public String getName() {
    return this.name;
}

複数のフィールドでthisを使用する:

public class Person {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getDescription() {
        return this.name + " is " + this.age + " years old";
    }
}

自分で試してみよう

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int age = Integer.parseInt(scanner.nextLine());
        String city = scanner.nextLine();
        
        Person person = new Person(name, age, city);
        
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("City: " + person.getCity());
        System.out.println(person.getDescription());
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン