JavaRush /Blog Java /Random-VI /Từ khóa này {trong ví dụ}

Từ khóa này {trong ví dụ}

Xuất bản trong nhóm
Tại JavaRush, học viên được làm quen với từ khóa theo nghĩa đen ngay từ những bài giảng đầu tiên this. Và theo thời gian nó trở nên rõ ràng ý nghĩa của nó. Nhưng nhiều người khi nhìn lại có lẽ sẽ thành thật tự nhủ rằng đã lâu rồi họ không thể nhận ra được ý nghĩa sâu sắc của từ khóa này. Trong bài viết này, chúng tôi vén bức màn bí mật về cách sử dụng từ khóa thischo những người vẫn chưa thể tìm ra nó... Chào mừng bạn! Nếu bạn lấy sách tham khảo Java của Schildt , ở trang 171 bạn sẽ đọc được rằng thiscần phải có một từ khóa để một phương thức có thể tham chiếu đến đối tượng đã gọi nó. Đây thực sự có thể là kết thúc của nó. Nhưng chúng ta cần chi tiết cụ thể. Từ khóa này {trong ví dụ} - 1Theo quy định, thisnó nên được sử dụng trong hai trường hợp:
  1. Khi biến thể hiện của lớp và biến phương thức/hàm tạo có cùng tên;
  2. Khi bạn cần gọi một hàm tạo của một loại (ví dụ: hàm tạo mặc định hoặc hàm tạo được tham số hóa) từ một loại khác. Đây còn được gọi là lệnh gọi hàm tạo rõ ràng.
Chỉ vậy thôi, thực ra không nhiều lắm, chỉ có hai trường hợp từ khóa đáng sợ này được sử dụng. Bây giờ chúng ta hãy xem xét hai tình huống này bằng các ví dụ.

Ví dụ một - biến thể hiện và biến phương thức có cùng tên

Giả sử chúng ta có một lớp Humanmà trường "name" được xác định: Từ khóa này {trong ví dụ} - 2Hãy nametạo một setter cho biến (setter khá hoạt động và không có thủ thuật nào ở đây): Xin lưu ý rằng chúng ta đang chuyển biến Từ khóa này {trong ví dụ} - 3cho phương thức (setter ) . Chúng tôi đã giới thiệu một biến mới và (nói chung) có thể gọi nó là bất cứ thứ gì chúng tôi muốn vì nó sẽ chỉ hiển thị trong {dấu ngoặc nhọn} của phương thức . Lưu ý rằng có một dòng trong setter: setNameString newNamesetName
name = newName;
Trên thực tế, chúng tôi đã giới thiệu một biến mới newNamevà gán nó cho một biến đã tồn tại trong lớp name. Nhiều lập trình viên nghĩ rằng thật lạ khi giới thiệu một biến với một tên mới nếu cuối cùng chúng ta lại nói về cùng một thứ. Về tên trong lớp Human. Do đó, các nhà phát triển ngôn ngữ đã nghĩ đến việc làm cho việc sử dụng một tên biến trở nên thuận tiện hơn. Nói cách khác, tại sao một biến lại có hai tên có nghĩa giống nhau. Tức là tôi muốn làm điều gì đó như thế này: Từ khóa này {trong ví dụ} - 4Nhưng trong trường hợp này có một vấn đề phát sinh . Bây giờ chúng ta có hai biến được đặt tên giống nhau. Một cái String namethuộc về lớp Human, còn cái kia String namethuộc về phương thức của nó setName. Do đó, máy Java không biết bạn muốn nói đến biến nào khi bạn viết một chuỗi trong setter:
name = name;
Java lấy cái gần nhất - nametừ phương thức setName:
Từ khóa này {trong ví dụ} - 5
và hóa ra là bạn chỉ cần gán một giá trị cho một biến nametừ phương thức này cho nó. Điều đó tất nhiên là không có ý nghĩa gì. Do đó, cần có một số cách để phân biệt một biến nametrong một lớp Humanvới một biến nametrong một phương thức setName. Để giải quyết vấn đề này, từ khóa đã được giới thiệu this, trong trường hợp này sẽ chỉ ra rằng cần phải gọi một biến không phải của một phương thức, mà là của một lớp Human:
Từ khóa này {trong ví dụ} - 6
Tức là thisnó sẽ đề cập đến đối tượng đang gọi, như đã nói ở đầu bài. Kết quả là tên của người đó setNamesẽ được đặt thông qua setter cho đối tượng được tạo. Dưới đây là mã không sử dụng từ khóa this. Đoạn mã này tạo một đối tượng lớp Humanvà đặt tên cho nó:
Từ khóa này {trong ví dụ} - 7
Và bên dưới là mã chương trình với từ khóa this:
public class Solution{
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Volodya");
        human1.print();
    }
}
class Human{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    void print(){
        System.out.println(name);
    }
}
Vì vậy, nó thistránh được việc đưa ra các biến mới để biểu thị cùng một thứ, điều này làm cho mã ít bị “quá tải” hơn với các biến bổ sung.

Ví dụ thứ hai - Sử dụng điều này để gọi hàm tạo một cách rõ ràng

Gọi một hàm tạo từ một hàm tạo khác có thể hữu ích khi bạn (thật kỳ lạ) có một số hàm tạo và bạn không muốn viết lại mã khởi tạo được đưa ra trong hàm tạo trước đó trong một hàm tạo mới. Bối rối? Mọi thứ không đáng sợ như nó có vẻ. Hãy xem đoạn mã bên dưới, nó có hai hàm tạo lớp Human:
class Human{
    int age;
    int weight;
    int height;

    Human(int age, int weight){
        this.age = age;
        this.weight = weight;
    }
    Human(int age, int weight, int height){
        //you call the constructor with two parameters
        this(age, weight);
        //and add the missing variable
        this.height = height;
    }
}
Ở đây trước tiên chúng ta có một hàm tạo hai tham số chấp nhận int ageint weight. Giả sử chúng tôi đã viết hai dòng mã trong đó:
this.age = age;
this.weight = weight;
và sau đó họ quyết định thêm một hàm tạo khác, với ba tham số, ngoài tuổi và cân nặng, còn có chiều cao. Trong hàm tạo mới, bạn có thể viết điều này:
this.age = age;
this.weight = weight;
this.height = height;
Nhưng thay vì lặp lại mã bạn đã viết trong hàm tạo này, bạn có thể sử dụng một từ khóa để thisgọi hàm tạo một cách rõ ràng với hai tham số:
this(age, weight);
// and add the missing variable:
this.height = height;
Vì vậy, bạn đang nói với hàm tạo bằng ba tham số:
  • gọi hàm tạo này, có hai tham số.
  • và thêm biến còn thiếu.
Thế thôi =)) Cuối cùng, chúng tôi lưu ý rằng từ khóa this trong Java chỉ được sử dụng như một phần của các phương thức hoặc hàm tạo của một thể hiện lớp. Nhưng ngầm hiểu, từ khóa thisđược truyền cho tất cả các phương thức ngoại trừ các phương thức tĩnh (do đó tại sao nó thisthường được gọi là tham số ngầm) và có thể được sử dụng để chỉ đối tượng được gọi là phương thức. Không cần phải sợ từ khóa này, vì Thisnó không đáng sợ.
Từ khóa này {trong ví dụ} - 9
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION