Người dịch: Lê Trung Kiên lớp java 08
Bài viết gốc: https://www.baeldung.com/java-this

1. Mở đầu.

Hôm nay, chúng ta sẽ cùng tìm hiểu từ khóa this.
Trong java, từ khóa this là một tham chiếu đến đối tượng hiện tại có phương thức đang được gọi.

2. Tham chiếu tới biến instance

Mục đích của việc sử dụng từ khóa this ở đây là để phân biệt đâu là biến và đâu là thuộc tính của lớp khi chúng trùng tên với nhau. Điều này thể hiện rõ ràng nhất thông qua constuctor.

Cùng xem qua ví dụ sau:

public class KeywordTest {

    private String name;
    private int age;
    
    public KeywordTest(String name, int age) {
        name = name;
        age = age;
    }

    public static void Main(string[] args)
   {
       KeywordTest keywordTest = new KeywordTest("Kevin", 23); //Khởi tạo một KeywordTest có name = "Kevin" và age = 23

       System.out.println(keywordTest.name); //In giá trị ra màn hình
   }
   //Output: null
}

Đáng lẽ ra khi truyền tham số “Kevin” và 23 vào đối tượng trên thì khi in ra màn hình phải hiển thị được name là Kevin. Tuy nhiên lại in ra giá trị là null. Lí do là bởi complier không phân biệt được đâu là tham số, đâu là thuộc tính của class. Vì vậy chúng ta cần từ khóa this để phân biệt hai thứ này.

public class KeywordTest {

    private String name;
    private int age;
    
    public KeywordTest(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public static void Main(string[] args)
   {
       KeywordTest keywordTest = new KeywordTest("Kevin", 23); //Khởi tạo một KeywordTest có name = "Kevin" và age = 23

       System.out.println(keywordTest.name); //In giá trị ra màn hình
   }
   //Output: Kevin
}

Như các bạn có thể thấy, từ khóa this giúp complier phân biệt được đâu là tham số, đâu là thuộc tính của class.

3. Tham chiếu các Contrucstor trong cùng Class

Từ một hàm khởi tạo, ta có thể dùng this() để gọi một hàm khởi tạo khác trong cùng class. Ví dụ dưới đây, ta sẽ sử dụng this() thay cho hàm khởi tạo mặc định, bên trong một hàm khởi tạo có tham số.
Nếu bạn chưa biết hàm khởi tạo mặc định là gì, có thể tham khảo bài viết về các hàm khởi tạo ở đây.

public KeywordTest(String name, int age) {
    this();
    
    // các đoạn code khác
}

Ngược lại, ta cũng có thể gọi tới hàm khởi tạo có tham số bên trong một hàm khởi tạo không tham số:

public KeywordTest() {
    this("John", 27);
}
  • Lưu ý là this() phải được nằm ở dòng đầu tiên của hàm khởi tạo, nếu không sẽ báo lỗi.

4. Sử dụng this như tham số

Ở đây chúng ta có phương thức printInstance() với this là tham số:

public KeywordTest() {
    printInstance(this);
}

public void printInstance(KeywordTest thisKeyword) {
    System.out.println(thisKeyword);
}

Bên trong hàm khởi tạo, ta gọi tới phương thức printInstance(). Với từ khóa this, chúng ta đã tham chiếu tới instance hiện tại.

5. Returning this

Ta cũng có thể dùng this để trả về instace hiện tại của class từ phương thức.

6. Từ khóa this bên trong inner class

Ta có thể dùng this từ một inner class (class bên trong một class khác), hãy xem ví dụ sau:

public class KeywordTest {

    private String name;

    class ThisInnerClass {

        boolean isInnerClass = true;

        public ThisInnerClass() {
            KeywordTest thisKeyword = KeywordTest.this;
            String outerString = KeywordTest.this.name;
        }
    }
}

Ở đây, bên trong hàm khởi tạo của inner class, ta có thể tham chiếu đến class KeywordTest bằng cách gọi KeywordTest.this. Thậm chí ta có thể tham chiếu tới các thuộc tính của KeywordTest bằng cách gọi KeywordTest.this.name.

7. Kết luận

Trong bài viết này, hi vọng các bạn có thêm hiểu biết về từ khóa this trong java. Cảm ơn các bạn đã theo dõi.