Bài viết này mình sẽ giúp bạn tìm hiểu về từ khóa this trong Java qua 6 ví dụ cụ thể để bạn nắm rõ cách sử dụng chúng trong khi lập trình.
1. Giới thiệu vấn đề
Khi làm việc với Java được một thời gian dài, các bạn có lẽ đã nghe qua thuộc tính của lớp và biến của hàm.
Nhưng làm sao phân biệt được hai khái niệm này?
Đôi khi người lập trình đặt tên chúng y hệt nhau khiến việc xử lý đôi khi gặp chút khó khăn.
Hoặc khi làm việc với đối tượng và các hàm constructor, muốn gọi qua lại giữa các hàm constructor thì bạn sẽ làm như thế nào?
> Đọc thêm: Tất tần tật về Constructor trong Java
Làm thế nào để tận dụng code có sẵn của các hàm mà không cần viết lại nhiều lần?
Dám chắc rằng bạn sẽ bối rồi khi cần giải quyết vấn đề như thế.
Tuy nhiên trong Java, bạn chỉ cần sử dụng một từ thôi đã đủ để giải quyết các vấn đề trên – đó chính là this.
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.
Hay nói theo cách khác, từ khóa this dùng để ánh xạ đối tượng hiện tại.
Giống như trong lớp NgườiYêu
có rất nhiều đối tượng như Thảo
, An
, Uyên
, Trang
,… thì khi xử lý các thuộc tính và phương thức ta sẽ dùng từ em
để ám chỉ đối tượng hiện tại cần thực hiện.
2. 6 Cách sử dụng từ khóa this trong Java
6 Cách sử dụng this trong Java
Trong Java, từ khóa this tuy ngắn gọn như có tổng cộng tất cả 6 cách sử dụng.
2.1. Sử dụng this để tham chiếu tới biến instance của lớp hiện tại.
Đây là cách mà từ khóa this giúp bạn phân biệt giữa biến toàn cục và tham số khi tên của chúng hoàn toàn giống nhau.
Phần code ví dụ bên dưới hy vọng sẽ giúp bạn hiểu ra vấn đề.
package thisdemo;
public class ReferInstanceVariables {
int a;
int b;
// Hàm constructor chứa tham số
ReferInstanceVariables(int a, int b) {
this.a = a;
this.b = b;
}
void display() {
// Hiển thị giá trị của biến a và b
System.out.println("a = " + a + "\nb = " + b);
}
public static void main(String[] args) {
ReferInstanceVariables object = new ReferInstanceVariables(1, 99);
object.display();
}
}
Như bạn thấy đó, biến a
và biến b
đặt ở bên ngoài hàm ReferInstanceVariables
có tên hoàn toàn giống tham số được truyền vào.
Tuy nhiên, khi gọi this.a
thì Java sẽ hiểu là nó cần gọi đến biến a
có trong bối cảnh (context) hiện tại.
Trong trường hợp này, this.a = a
sẽ tương đương với this.a = 1
. Do đó, biến a
sẽ được gán giá trị 1
khi chạy chương trình.
Tương tự như vậy đối với this.b = b
2.2. Sử dụng this() gọi Constructor của lớp hiện tại
Cách này được ưu tiên sử dụng nếu chương trình có nhiều Constructor và có nhu cầu sử dụng lại.
package thisdemo;
public class InvokeConstructor {
int a;
int b;
// Hàm constructor mặc định
InvokeConstructor() {
this(1, 99);
System.out.println("Hàm constructor mặc định \n");
}
// Hàm constructor chứa tham số
InvokeConstructor(int a, int b) {
this.a = a;
this.b = b;
System.out.println("Tham số mặc định");
}
public static void main(String[] args) {
InvokeConstructor object = new InvokeConstructor();
}
}
Khi bạn chạy chương trình, bạn sẽ thấy this(1, 99)
sẽ gọi đến contructor có chứa tham số (chính xác là 2 tham số kiểu int)
2.3. Sử dụng this để trả về biến instance của lớp hiện tại.
Đặc biệt lưu ý rằng kiểu trả về của phương thức phải là kiểu class. Nếu không tin bạn hãy thử in ra biến tham chiếu và this để kiểm tra.
package thisdemo;
public class ReturnInstance {
int a;
int b;
// Hàm constructor mặc định
ReturnInstance() {
a = 1;
b = 99;
}
// Phương thức trả về biến instance của lớp
ReturnInstance get() {
return this;
}
// Hiện thị giá trị của a và b
void display() {
System.out.println("a = " + a + "\nb = " + b);
}
public static void main(String[] args) {
ReturnInstance object = new ReturnInstance();
object.get().display();
}
}
Hãy thử chạy để xem kết quả bạn nhé.
2.4. Sử dụng this làm đối số của phương thức.
Thông thường thì this trong trường hợp này được sử dụng nhiều đối với các chương trình Java có liên quan đến các yêu cầu xử lý sự kiện.
package thisdemo;
public class MethodParameter {
int a;
int b;
// Hàm constructor mặt đinh
MethodParameter() {
a = 1;
b = 99;
}
// Phương thức này nhận this như là một tham số
void display(MethodParameter obj) {
System.out.println("a = " + obj.a + "\nb = " + obj.b);
}
// Trả về biến instance của lớp
void get() {
display(this);
}
public static void main(String[] args) {
MethodParameter object = new MethodParameter();
object.get();
}
}
2.5. Sử dụng để gọi phương thức của lớp hiện tại.
Nhưng trên thực tế, nếu bạn quên hoặc không sử dụng từ khoá this
, trình biên dịch của Java sẽ tự động thay bạn thêm từ khoá this
cho việc gọi phương thức.
package thisdemo;
public class InvokeClassMethod {
void display() {
// gọi hàm show
this.show();
System.out.println("Kết thúc hàm display");
}
void show() {
System.out.println("Hàm show được gọi");
}
public static void main(String args[]) {
InvokeClassMethod ahihi = new InvokeClassMethod();
ahihi.display();
}
}
2.6. Sử dụng làm đối số của hàm constructor.
Tính năng này trong thực tế rất hữu ích, nhất là với các hàm constructor được sử dụng nhiều lần.
package thisdemo;
public class ArgumentConstructor {
int x = 100;
// Hàm constructor tạo ra đối tượng A
// sau đó chuyển nó thành đối số trong hàm constructor
ArgumentConstructor() {
Ahihi obj = new Ahihi(this);
}
// phương thức hiện thị giá trị của x
void display() {
System.out.println("Giá trị của x trong lớp B là: " + x);
}
class Ahihi {
ArgumentConstructor obj;
// Phương thức khởi tạo tham số với dối tượng B
Ahihi(ArgumentConstructor obj) {
this.obj = obj;
// gọi phương thức display của lớp B
obj.display();
}
}
public static void main(String[] args) {
ArgumentConstructor obj = new ArgumentConstructor();
}
}
3. Chúc mừng bạn đã hiểu sâu thêm về từ khóa this trong Java
This trong Java là một trong những từ khoá cực kỳ quan trọng, nó vừa giúp bạn tối ưu được code, vừa hỗ trợ xây dựng các phương án giải quyết vấn đề một các nhanh – gọn – lẹ.
Nếu bạn đam mê và theo đuổi để trở thành một lập trình viên Java thì chắc chắn luôn là bạn còn làm việc với this dài dài.
Bởi Java làm việc hầu hết dựa trên lớp và các đối tượng mà this chính là cầu nối quan trọng để liên kết các thành phần bên trên lại với nhau.
Nếu bạn chưa hiểu và dùng được từ khóa this thì hãy luyện tập đi luyện tập lại 6 cách sử dụng ở trên bạn nhé.
Hoặc...
> Thực sự làm chủ ngôn ngữ Java bằng cách tham gia Khóa học Java Fullstack (Khóa huấn luyện Java Fullstack trong 4 - 6 tháng) tại NIIT - ICT Hà Nội.
> Có thể bạn muốn biết: this trong JavaScript (Rất khác với this trong Java đó)
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0383.180086
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #icthanoi #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python