2012-01-03 16 views
6

Studiowałem nadpisywanie metody w Javie, gdy ai natrafiono na słowo kluczowe this. Po przeprowadzeniu wielu poszukiwań w Internecie i innych źródłach, doszedłem do wniosku, że słowo kluczowe this jest używane, gdy nazwa zmiennej instancji jest taka sama dla parametrów funkcji konstruktora, . Mam rację, czy nie?Użycie słowa kluczowego "this" w języku Java

+4

Nie zawsze. Może być kilka przypadków. Na przykład, jeśli chcesz przekazać własną instancję do metody jako parametru, wykonaj 'metodę (this)'. –

+1

@Junior Bill gates: To tylko jedno poprawne użycie słowa kluczowego "this". – paulsm4

Odpowiedz

12

this to alias lub nazwa bieżącej instancji wewnątrz instancji. Przydaje się do ujednoznaczniania zmiennych instancji od lokalnych (w tym parametrów), ale może być użyty samodzielnie, aby po prostu odwoływać się do zmiennych i metod składowych, wywoływać przeciążenia innych konstruktorów lub po prostu odwoływać się do instancji . Niektóre przykłady zastosowań zastosowanie (nie wyczerpujące):

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

Warto zwrócić uwagę: jeśli użyto go w konstruktorze, to 'this (...)' musi być pierwszym stwierdzeniem. – nneonneo

+1

Kwalifikatory takie jak "this" lub nazwa klasy dla wywołań statycznych sprawiają, że kod jest znacznie bardziej czytelny i pozwala zaoszczędzić sporo czasu. W ciągu sekundy czytelnik zna zakres zmiennych lub metod lub ich źródło. Odmawiam czytania/pomocy przy problemach z kodem, jeśli nie zostały użyte odpowiednie kwalifikatory. Nie mam czasu na podążanie za metodami ani odgadywanie, w jakiej klasie się znajdują, zwłaszcza jeśli współczesne idee, takie jak zaćmienie, mają autouzupełnianie funkcji operacji zapisywania. – djmj

1

Odnosi aktualny obiekt. Jeśli posiadasz klasę ze zmiennymi int A i metodę xyz część klasy ma int A, aby odróżnić, które "A" masz na myśli, użyjesz this.A. To tylko jeden przykład.

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

Chciałbym zmienić swój język. Słowo kluczowe to jest używane, gdy trzeba użyć zmiennej globalnej klasy w konstruktorze.

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

to jest odniesieniem do aktualnej - obiekt, którego metoda lub konstruktora, jest nazywany. Możesz odwołać się do dowolnego elementu bieżącego obiektu z metody instancji lub konstruktora, używając tej.

Jeszcze jedno, o czym należy pamiętać to, że to słowo kluczowe może być pierwszym stwierdzeniem Twojej metody.

2

Masz rację, ale to tylko scenariusz użycia, a nie definicja. Słowo kluczowe this odnosi się do "bieżącego obiektu". Jest używany głównie w celu przekazania obiektu jako parametru do metody innego obiektu.

Tak więc, na przykład, jeśli istnieje obiekt o nazwie Person i obiekt o nazwie PersonSaver i wywołać Person.SaveYourself(), następnie Person może po prostu wykonaj następujące czynności: PersonSaver.Save(this);

Teraz tak się składa, że ​​this może być również użyty do rozróżnienia danych instancji i parametrów od konstruktora lub metod, jeśli są identyczne.

11

this kluczowe mogą być wykorzystane do (nie może być używany z metody statyczne):

  1. Aby uzyskać odniesienie do obiektu, przez które ta metoda nazywa się w niej (metoda instancji).
  2. Aby uniknąć pola zacienionego przez metodę lub parametr konstruktora.
  3. Aby wywołać konstruktora tej samej klasy.
  4. W przypadku nadpisania metody, do wywołania metody bieżącej klasy użyto this.
  5. Odwołanie się do wewnętrznej klasy. mi.g ClassName.this
  6. Aby utworzyć obiekt klasy wewnętrznej np enclosingObjectReference.new EnclosedClass
0

jeśli knowladge o C, C++ lub wskaźniki, w tym języku jest to wskaźnik, który wskazuje sam obiekt. W java wszystko jest odniesieniem. Więc jest to odniesienie do samego siebie w java. Jedną z potrzeb danego słowa kluczowego jest to, że:

Pomyśl, że jest to klasa

public class MyClass 
{ 
     public int myVar; 

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

     } 


} 

Jeśli nie jest to słowo kluczowe ciebie to jest zdezorientowany, że jest to paramter lub klasa field.When tego użyć. myVar to pole tego obiektu.

1

Generalnie korzystanie z „tego” jest zarezerwowany dla zmiennych i metod przykład, nie metod klasy ...

„Metody klasy nie można używać tego słowa kluczowego, ponieważ nie ma instancja dla odnosić się do tego, aby ...”

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

Oto trywialny przykład ...

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()); 
    } 
}  

I instancji osoby ....

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

ten jest używany w języku Java. Możemy używać w dziedziczeniu & również w metodzie przeciążania nadpisywania metody &. Ponieważ rzeczywisty parametr lub nazwa zmiennej instancji ma taką samą nazwę, możemy użyć tego słowa kluczowego complsary. Ale czasami to nie jest to samo, kiedy nie możemy użyć tego słowa kluczowego complsary ..... Np .: - klasa super { int x; Super (int x) { this.x = x } }

0

W przypadku zmiennej składowej i lokalnego konfliktu nazwa zmiennej, to słowo klucz może być używany w odniesieniu zmienną składową podobnych

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

to słowo kluczowe mają następujące zastosowania
1.used skierować wystąpienie prąd zmienny klasy

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(); 
} 
} 

tutaj parametr i zmienne instancji są takie same, dlatego używamy tego
2.used powołać prąd Konstruktor klasy

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.Niniejsza kluczowe mogą być wykorzystane do wywołania metody prąd klasy (pośrednio)

4.This mogą być przekazywane argumentu wywołania metody

5.Niniejszy mogą być przekazywane argumentu wywołania konstruktora

6.można go również użyć do zwrócenia bieżącej instancji klasy

Powiązane problemy