2012-01-03 34 views
6

Tôi đã nghiên cứu phương pháp ghi đè trong Java khi ai đi qua từ khóa this. Sau khi tìm kiếm nhiều về điều này trên Internet và các nguồn khác, tôi kết luận rằng từ khóa this được sử dụng khi tên của một biến mẫu là giống với hàm constructor tham số. Là tôi đúng hay sai?Sử dụng từ khóa "này" trong java

+4

Không phải lúc nào. Có thể có vài trường hợp. Ví dụ, khi bạn muốn truyền thể hiện của riêng bạn cho một phương thức như một tham số, bạn làm 'phương thức (this)'. –

+1

@Junior Cổng Bill: Đó chỉ là một lần sử dụng hợp lệ từ khóa "này". – paulsm4

Trả lời

12

this là bí danh hoặc tên cho cá thể hiện tại bên trong cá thể. Nó rất hữu ích cho việc định hướng các biến mẫu từ người dân địa phương (bao gồm các tham số), nhưng nó có thể được sử dụng một cách đơn giản để chỉ các biến và phương thức của thành viên, gọi các quá tải xây dựng khác hoặc đơn giản là tham chiếu đến cá thể . Một số ví dụ về sử dụng áp dụng (không đầy đủ):

class Foo 
{ 
    private int bar; 

    public Foo() { 
      this(42); // invoke parameterized constructor 
    } 

    public Foo(int bar) { 
     this.bar = bar; // disambiguate 
    } 

    public void frob() { 
      this.baz(); // used "just because" 
    } 

    private void baz() { 
      System.out.println("whatever"); 
    } 

} 
+2

Giá trị chỉ ra: khi được sử dụng trong một hàm tạo, 'this (...)' phải là câu lệnh đầu tiên. – nneonneo

+1

Các bộ định tính như 'this' hoặc tên lớp cho các cuộc gọi tĩnh làm cho mã của bạn dễ đọc hơn và tiết kiệm rất nhiều thời gian. Trong vòng một giây người đọc biết phạm vi của các biến hoặc các phương thức hoặc nguồn của nó. Tôi từ chối đọc/trợ giúp với các vấn đề về mã nếu các trình độ thích hợp được sử dụng. Tôi không có thời gian để làm theo các phương pháp hoặc đoán trong đó lớp họ đang có, đặc biệt là nếu ide hiện đại như eclipse có tính năng tự động hoàn thành về hoạt động tiết kiệm. – djmj

1

này đề cập đối tượng hiện tại. Nếu bạn có lớp với các biến int A và một phần xyz của lớp có int A, chỉ để phân biệt 'A' nào bạn đang giới thiệu, bạn sẽ sử dụng this.A. Đây chỉ là một ví dụ.

public class Test 
{ 
int a; 

public void testMethod(int a) 
{ 
this.a = a; 
//Here this.a is variable 'a' of this instance. parameter 'a' is parameter. 
} 
} 
-1

Tôi muốn sửa đổi ngôn ngữ của bạn. Các này từ khóa được sử dụng khi bạn cần phải sử dụng biến toàn cầu lớp trong các nhà xây dựng.

public class demo{ 
    String name; 
    public void setName(String name){ 
     this.name = name; //This should be first statement of method. 
    } 
} 

đây là một tham chiếu đến đối tượng hiện tại - những đối tượng có phương pháp hoặc constructor được gọi. Bạn có thể tham khảo bất kỳ thành viên nào của đối tượng hiện tại từ bên trong một phương thức thể hiện hoặc một hàm tạo bằng cách sử dụng này.

Một điều nữa cần lưu ý là từ khóa này có thể là tuyên bố đầu tiên của phương pháp của bạn.

2

Bạn nói đúng, nhưng đây chỉ là kịch bản sử dụng, không phải là định nghĩa. Từ khóa this đề cập đến "đối tượng hiện tại". Nó chủ yếu được sử dụng để một đối tượng có thể tự truyền nó như một tham số cho một phương thức của một đối tượng khác.

Vì vậy, ví dụ, nếu có một đối tượng gọi Person, và một đối tượng gọi PersonSaver, và bạn gọi Person.SaveYourself(), sau đó Person có thể chỉ làm như sau: PersonSaver.Save(this);

Bây giờ, nó chỉ xảy ra là this cũng có thể được sử dụng để phân biệt giữa dữ liệu cá thể và tham số cho hàm tạo hoặc phương thức, nếu chúng giống hệt nhau.

11

this từ khóa có thể được sử dụng cho (Nó không thể được sử dụng với các phương pháp tĩnh):

  1. Để có được tài liệu tham khảo của một đối tượng thông qua phương pháp đó được gọi là bên trong nó (phương pháp chẳng hạn).
  2. Để tránh trường bị che khuất bởi một phương thức hoặc tham số hàm tạo.
  3. Để gọi hàm tạo của cùng một lớp.
  4. Trong trường hợp phương pháp ghi đè, this được sử dụng để gọi phương thức của lớp hiện tại.
  5. Để tham chiếu đến lớp bên trong. e.g ClassName.this
  6. Để tạo một đối tượng của lớp bên trong ví dụ enclosingObjectReference.new EnclosedClass
0

nếu bạn đã knowladge về C, C++ hoặc con trỏ, bằng ngôn ngữ rằng đây là một con trỏ trỏ đối tượng riêng của mình. Trong java mọi thứ đều là tham chiếu. Vì vậy, nó là tham chiếu đến chính nó trong java. Một trong những nhu cầu của khóa này là:

Nghĩ rằng đây là lớp học của bạn

public class MyClass 
{ 
     public int myVar; 

     public int myMethod(int myVar) 
     { 
      this.myVar = myVar;  // fields is set by parameter 

     } 


} 

Nếu không có từ khoá này bạn nó đang nhầm lẫn rằng đây là paramter hoặc lớp field.When bạn sử dụng này. myVar nó đề cập đến trường của đối tượng này.

1

Nói chung việc sử dụng 'này' được dành riêng cho các biến dụ và phương pháp, chứ không phải phương pháp lớp ...

"phương pháp lớp học không thể sử dụng từ khóa này như không có ví dụ cho này để tham khảo ..."

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Dưới đây là một ví dụ nhỏ ...

public class Person { 
    private String name; 
    private int  age; 
    private double weight; 
    private String height; 
    private String gender; 
    private String race; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public int getAge(){ 
     return this.age; 
    } 

    public void setWeight(double weight) { 
     this.weight = weight; 
    } 

    public double getWeight() { 
     return this.weight; 
    } 

    public void setHeight(String height) { 
     this.height = height; 
    } 

    public String getHeight() { 
     return this.height; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getGender() { 
     return this.gender; 
    } 

    public void setRace(String race) { 
     this.race = race; 
    } 

    public String getRace() { 
     return this.race; 
    } 

    public void displayPerson() { 
     System.out.println("This persons name is :" + this.getName()); 
     System.out.println("This persons age is :"  + this.getAge()); 
     System.out.println("This persons weight is :" + this.getWeight());    
     System.out.println("This persons height is :" + this.getHeight()); 
     System.out.println("This persons Gender is :" + this.getGender()); 
     System.out.println("This persons race is :" + this.getRace()); 
    } 
}  

Và đối với một thể hiện của một người ....

public class PersonTest { 
    public static void main(String... args) { 
     Person me = new Person(); 
     me.setName("My Name"); 
     me.setAge(42); 
     me.setWeight(185.00); 
     me.setHeight("6'0"); 
     me.setGender("Male"); 
     me.setRace("Caucasian"); 
     me.displayPerson(); 
    } 
} 
-2

này được sử dụng trong java. Chúng ta có thể sử dụng trong thừa kế & cũng sử dụng trong phương thức nạp chồng & phương pháp ghi đè. Bởi vì thông số thực tế hoặc tên biến mẫu có cùng tên thì chúng ta có thể sử dụng từ khóa này tuân thủ. Nhưng một số lần điều này là không giống như khi chúng ta không thể sử dụng từ khóa này complsary ..... Ví dụ: - lớp siêu { int x; siêu (int x) { this.x = x }}

0

Trong trường hợp của biến thành viên và địa phương xung đột tên biến, từ khóa này có thể được dùng để ám chỉ biến thành viên như thế nào,

public Loan(String type, double interest){ 
this.type = type; 
this.interest = interest; 
} 
2

từ khóa này có công dụng sau
1.used để tham khảo ví dụ lớp hiện tại biến

class Student{ 
int id; 
String name; 

student(int id,String name){ 
this.id = id; 
this.name = name; 
} 
void display(){System.out.println(id+" "+name);} 
public static void main(String args[]){ 
Student s1 = new Student(111,"Karan"); 
Student s2 = new Student(222,"Aryan"); 
s1.display(); 
s2.display(); 
} 
} 

đây tham số và biến dụ là cùng đó là lý do tại sao chúng tôi đang sử dụng này
2.used để gọi hiện tại lớp constructor

class Student{ 
int id; 
String name; 
Student(){System.out.println("default constructor is invoked");} 

Student(int id,String name){ 
this();//it is used to invoked current class constructor. 
this.id = id; 
this.name = name; 
} 
void display(){System.out.println(id+" "+name);} 

public static void main(String args[]){ 
Student e1 = new Student(111,"karan"); 
Student e2 = new Student(222,"Aryan"); 
e1.display(); 
e2.display(); 
} 
}  

3.this từ khóa có thể được sử dụng để gọi phương thức lớp hiện tại (ngầm)

4.this thể được thông qua tranh luận trong các cuộc gọi phương pháp

5.this thể được thông qua tranh luận trong các cuộc gọi constructor

6.điều này cũng có thể được sử dụng để trả về cá thể hiện tại của lớp

Các vấn đề liên quan