2015-05-27 11 views
6

Theo như tôi biết điều này được sử dụng trong các tình huống sau đây:Nơi để sử dụng "này" trong java?

  1. this từ khóa được sử dụng khi chúng ta muốn tham khảo ví dụ biến có cùng tên như biến cục bộ.
  2. Gọi một hàm tạo khác trong cùng một lớp.
  3. Truyền thể hiện lớp làm đối số cho phương thức.
  4. Truy cập các biến lớp ngoài.

Nhưng tôi đã trải qua mã dự án của tôi, nơi họ đang sử dụng này trong thu khí như:

class a { 
    int time; 

    int getValue() { 
     return this.time * 5.; 
    } 
} 

Theo như tôi biết, mỗi đối tượng có bản sao riêng của mình biến dụ và phương pháp, như vậy sẽ quay trở lại theo cách này có ý nghĩa gì. Vui lòng làm rõ.

Stackoverfow vấn đề được đề cập: When should I use "this" in a class?

+3

'this' này đề cập đến trường hợp đối tượng hiện tại, vì vậy' this.time' đề cập đến "bản sao của các biến đối tượng của chính nó". Đó là tùy chọn mặc dù. Nhiều lập trình viên không sử dụng 'this' khi đề cập đến các biến mẫu. Mã @SrinathGanesh hiển thị là một quy ước tốt đẹp cho các nhà xây dựng mặc dù. – DavidS

Trả lời

6

Khi bạn có một phương pháp giống như sau:

public void setFoo(Foo foo) { 
    this.foo = foo; 
} 

Sử dụng this là bắt buộc. Nếu không, nó sẽ gán đối số foo cho chính nó, thay vì gán nó cho biến cá thể.

Nhưng điều đó không có nghĩa đó là tình huống duy nhất bạn có thể sử dụng this. Các mã sau đây là đúng tương đương:

public void setFoo(Foo newFoo) { 
    this.foo = newFoo; 
} 

Mặc dù trong trường hợp đó, bạn có thể rất tốt viết

public void setFoo(Foo newFoo) { 
    foo = newFoo; 
} 

this là không cần thiết nữa. Điều đó không làm cho nó bất hợp pháp.

Vì vậy,

int getValue() { 
    return time * 5; 
} 

int getValue() { 
    return this.time * 5; 
} 

là pháp giống hệt nhau.

9

Nhiều người (tôi là một trong số họ) sử dụng this từ khóa ngay cả khi không cần thiết.

  • Một số người thấy nó rõ ràng hơn để đưa this trước bất cứ điều gì thuộc cùng lớp, cùng một logic áp dụng cho super.
  • Một số người luôn sử dụng this bằng phản xạ để tự động hoàn thành tốt hơn (cửa sổ bật lên xuất hiện tự động, lập trình lười biếng) trong một số IDE.

Những điểm này là chủ yếu dựa trên ý kiến ​​ và không thực sự quan trọng.

Đối với các mục đích khác, như bạn đã đề cập, nó có thể được sử dụng để truyền tham số cho một hàm tạo khác, chuyển thể hiện lớp hoặc để phân biệt khi bạn có hai biến có cùng tên.

Tuy nhiên, IMO, cách đơn giản hơn để không có nhiều biến có cùng tên.

1

Từ khóa 'this' được sử dụng để chỉ đối tượng Tham chiếu hiện tại đang được sử dụng. Điều này chỉ được sử dụng như là cú pháp cú pháp để dễ dàng thực hiện các nhiệm vụ nhất định như gọi các nhà xây dựng trong cùng một lớp, truy cập các trường trong cùng một lớp, các kiểu tham số ..

Đây là một ví dụ về hai kiểu lập trình khác nhau. Cả hai đều làm tương tự nhưng ví dụ đầu tiên sử dụng 'this' để gọi lại hàm tạo một cách rõ ràng.

public class Foo { 
    public Foo() { this("Hello"); } //Explicit constructor call 
    public Foo(String string) { System.out.print(string); } 
    } 

    public class Bar { 
    public Bar() { new Bar("Hello"); } 
    public Bar(String string) { System.out.print(string); } 
    } 
1

Từ khóa 'this' thường được sử dụng từ trong các lớp ẩn danh đến trường tham chiếu trong lớp chứa. Ví dụ:

public class App 
{ 
    public String myString = "This is Java"; 
    public App() 
    { 
     JButton button = new JButton("Test"); 
     button.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) 
     { 
      System.out.println(App.this.myString); // <-- App.this gives access to public fields in App 
     }}); 
    } 
} 
Các vấn đề liên quan