NỘI DUNG BÀI VIẾT
Trong bài viết này, chúng ta sẽ cùng tìm hiểu về từ khóa this trong Java nhé.
Ánh xạ đối tượng khi cần sử dụng
Nếu không sử dụng this trong phương thức khởi tạo, ta có ví dụ sau:
public class Person { public String name; public int age; public float height; public Person(String name, int age, float height) { name = name; age = age; height = height; } }
Ta hãy thử khởi tạo đối tượng và in thông tin ra
public static void main(String[] args) { Person person1 = new Person("Huy",21,1.7f); System.out.println(person1.name); System.out.println(person1.age); System.out.println(person1.height); }
Kết quả:
null
0
0.0
Code language: JavaScript (javascript)
Ta thấy xuất hiện giá trị mặc định của thuộc tính khi khởi tạo, có nghĩa việc gán giá trị khi khởi tạo không thành công.
Gọi phương thức từ lớp hiện tại
Ngoài gọi được thuộc tính, thì this có thể gọi đến phương thức từ lớp hiện tại.
Ví dụ: Viết phương thức trả thông tin Person và gọi mỗi lần khởi tạo đối tượng
public class Person { public String name; public int age; public float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; this.getInfo(); } public void getInfo() { System.out.println("Name: "+this.name); System.out.println("Age: "+this.age); System.out.println("Height: "+this.height); } public static void main(String[] args) { Person a = new Person("Huy",20,17.f); Person b = new Person("Binh",20,17.f); } }
Kết quả:
Name: Huy
Age: 20
Height: 17.0
Name: Binh
Age: 20
Height: 17.0
Code language: CSS (css)
Gọi lại phương thức khởi tạo
Khi dùng this() thì sẽ triệu hồi phương thức khởi tạo Constructor của lớp hiện tại. Thường được sử dụng trong việc có nhiều phương thức khởi tạo và muốn tái sử dụng code nhiều lần:
Ví dụ: Ta tạo 3 phương thức khởi tạo cho Person như sau:
public class Person { public String name; public int age; public float height; public Person(String name) { this.name = name; } public Person(String name, int age) { this(name); this.age = age; } public Person(String name, int age, float height) { this(name, age); this.height = height; } }
Như vậy ở phương thức main ta có thể khởi tạo đối tượng Person theo nhiều cách khác nhau:
public static void main(String[] args) { Person a = new Person("Huy"); Person b = new Person("Huy",22); Person c = new Person("Huy", 22, 1.9f); }
Trả về đối tượng (instance) của lớp hiện tại
Ta sẽ trả về instance của lớp hiện tại bằng từ khóa this như sau:
public class Person { public String name; public int age; public float height; public Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public Person getInstance(){ return this; } } public static void main(String[] args) { Person a = new Person("Huy",22,19f); System.out.println(a); System.out.println(a.getInstance()); }
Kết quả:
test.Person@1b6d3586
test.Person@1b6d3586
Code language: CSS (css)
Ở kết quả đều trả về chung một giá trị, giá trị in ra theo kiểu quy tắc dữ liệu tham chiếu.
Kết luận
Từ khóa this được sử dụng trong các trường hợp sau:
- Ánh xạ đối tượng khi cần sử dụng
- Gọi phương thức từ lớp hiện tại
- Gọi lại phương thức khởi tạo
- Trả về đối tượng (instance) của lớp hiện tại