Từ khóa this trong Java

Từ khóa this trong java là một biến tham chiếu được sử dụng để tham chiếu tới đối tượng của lớp hiện tại. Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java. Một class trong Java luôn tồn tại một biến this.

image

Tham chiếu tới biến instance của lớp hiện tại.

Từ khóa this trong java có thể được dùng để tham chiếu tới biến instance của lớp hiện tại. Sẽ rất phức tạp nếu như có một biến toàn cục và biến cục bộ trùng tên thì từ khóa this sẽ giúp bạn giải quyết vấn đề này.

thể hiện tham chiếu tới lớp
public class HocSinh {

    int id;
    String name;

    HocSinh(int id, String name) {
        id = id;
        name = name;
    }

    void hienThi() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        HocSinh s1 = new HocSinh(111, "Viet");
        HocSinh s2 = new HocSinh(222, "Nam");
        s1.hienThi();
        s2.hienThi();
    }
}
Kết quả
0 null
0 null

Ở ví dụ này, tên của tham số của constructor HocSinh() trùng với tên của biến toàn cục đó là lý do tại sao cần phải sử dụng từ khóa this để phân biệt biến cục bộ và biến toàn cục. Từ khóa this sẽ giúp chúng ta giải quyết vấn đề này.

public class HocSinh {

    int id;
    String name;

    HocSinh(int id, String name) {
        this.id = id;
        this.name = name;
    }

    void hienThi() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        HocSinh s1 = new HocSinh(111, "Viet");
        HocSinh s2 = new HocSinh(222, "Nam");
        s1.hienThi();
        s2.hienThi();
    }
}
Kết quả
111 Viet
222 Nam
Nếu biến cục bộ và biến toàn cục có tên khác nhau thì không cần sử dụng từ khóa this.

Sử dụng this() gọi constructor của lớp hiện tại.

Phương thức this() có thể được sử dụng để gọi constructor của lớp hiện tại. Cách sử dụng này sẽ hữu dụng hơn nếu bạn có nhiều constructor trong một lớp và bạn muốn sử dụng lại.

public class HocSinh2 {

    int id;
    String name;

    HocSinh2() {
        System.out.println("gọi constructor mặc định");
    }

    HocSinh2(int id, String name) {
        this(); // nó được sử dụng để gọi constructor của lớp hiện tại
        this.id = id;
        this.name = name;
    }

    void display() {
        System.out.println(id + " " + name);
    }

    public static void main(String args[]) {
        HocSinh2 e1 = new HocSinh2(111, "Viet");
        HocSinh2 e2 = new HocSinh2(222, "Nam");
        e1.display();
        e2.display();
    }
}
Kết quả
gọi Constructor mặc định
111 Viet
222 Nam

this() được dùng để sự dụng lại constructor trong constructor khác. Nó sẽ thừa kế các thuộc tính của constructor được gọi.

public class HocSinh3 {

    int id;
    String name;
    String city;

    HocSinh3(int id, String name) {
        this.id = id;
        this.name = name;
    }

    HocSinh3(int id, String name, String city) {
        this(id, name);// now no need to initialize id and name
        this.city = city;
    }

    void display() {
        System.out.println(id + " " + name + " " + city);
    }

    public static void main(String args[]) {
        HocSinh3 e1 = new HocSinh3(111, "Viet");
        HocSinh3 e2 = new HocSinh3(222, "Nam", "Ha Noi");
        e1.display();
        e2.display();
    }
}
Kết quả
111 Viet
222 Nam
this() phải được khai báo dòng lệnh đầu tiên trong Constructor.

Gọi phương thức của lớp hiện tại

Bạn có thể sử dụng từ khóa this để gọi phương thức của lớp hiện tại. Nếu bạn không sử dụng từ khóa this, trình biên dịch sẽ tự động thêm từ khóa this cho việc gọi phương thức.

image

public class HocSinh4 {

    void sayHello() {
        System.out.println("Hello Thaycacac");
    }

    void noiXinChao() {
        System.out.println("Xin chao Thaycacac");
        this.sayHello(); // bạn cũng có thể gọi thông qua biến this
    }

    void xinChao() {
        noiXinChao();// trình biên dịch sẽ thêm this để gọi phương thức noiXinChao()
    }

    public static void main(String args[]) {
        HocSinh4 hocSinh = new HocSinh4();
        hocSinh.xinChao();
    }
}
Kết quả
Xin chao Thaycacac
Hello Thaycacac

Sử dụng từ khóa this như một tham số của phương thức

Từ khóa this có thể được dùng như một tham số trong phương thức. Cách dùng này chủ yếu được sử dụng trong xử lý sự kiện.

public class HocSinh5 {

    void m(HocSinh5 obj) {
        System.out.println("Hello Thaycacac");
    }

    void p() {
        m(this); // this lúc này là đối tượng học sinh
    }

    public static void main(String args[]) {
        HocSinh5 hocSinh = new HocSinh5();
        hocSinh.p();
    }
}
Kết quả
Hello Thaycacac

Chúng ta cũng có thể truyền từ khóa this trong constructor.Việc này rất hữu ích nếu chúng ta phải sử dụng một đối tượng trong nhiều lớp.

class B {

    A4 obj;

    B(A4 obj) {
        this.obj = obj;
    }

    void display() {
        System.out.println(obj.data);// sử dụng biến thành viên cửa lớp A4
    }
}

class A4 {

    int data = 10;

    A4() {
        B b = new B(this);
        b.display();
    }

    public static void main(String args[]) {
        A4 a = new A4();
    }
}
Kết quả
10

Sử dụng từ khóa this để trả về instance của lớp hiện tại

Chúng ta có thể trả về instance của lớp hiện tại bằng cách sử dụng từ khóa this. Trong trường hợp này, kiểu trả về của phương thức phải là kiểu class (không là kiểu nguyên thủy).

class A {
    A getA() {
        return this;
    }
    void msg() {
        System.out.println("Hello Thaycacac");
    }
}

class Test1 {
    public static void main(String args[]) {
        new A().getA().msg();
    }
}
Kết quả
Hello Thaycacac
Avatar Administrator

Administrator

@thaycacac
Chẳng có gì trở nên dễ dàng hơn. Chỉ là bạn trở nên mạnh mẽ hơn mà thôi.
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello