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
Odpowiedz
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");
}
}
Warto zwrócić uwagę: jeśli użyto go w konstruktorze, to 'this (...)' musi być pierwszym stwierdzeniem. – nneonneo
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
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.
}
}
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.
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.
this
kluczowe mogą być wykorzystane do (nie może być używany z metody statyczne):
- Aby uzyskać odniesienie do obiektu, przez które ta metoda nazywa się w niej (metoda instancji).
- Aby uniknąć pola zacienionego przez metodę lub parametr konstruktora.
- Aby wywołać konstruktora tej samej klasy.
- W przypadku nadpisania metody, do wywołania metody bieżącej klasy użyto
this
. - Odwołanie się do wewnętrznej klasy. mi.g
ClassName.this
- Aby utworzyć obiekt klasy wewnętrznej np
enclosingObjectReference.new EnclosedClass
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.
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();
}
}
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 } }
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;
}
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
- 1. Java - użycie słowa kluczowego "super"
- 2. Używanie słowa kluczowego "this" w obiekcie JavaScript
- 3. Wyjątek obsługi konstruktora i użycie tego słowa kluczowego Java
- 4. Równoważnik słowa kluczowego C# "as" w języku Java
- 5. użycie słowa kluczowego zajmuje mniej miejsca?
- 6. Dlaczego używać słowa kluczowego "this", aby uzyskać metody nadklasy?
- 7. Jak mogę pozbyć się słowa kluczowego `this` w lokalnych funkcjach?
- 8. Optymalizacje dla końcowego słowa kluczowego
- 9. 5 sposobów na użycie słowa kluczowego static w Javie
- 10. Pełny przykład użycia lotnego słowa kluczowego w java?
- 11. Równoważnik słowa kluczowego Super w C#
- 12. Zasady korzystania z słowa kluczowego restrict w języku C?
- 13. Jaki jest pożytek ze słowa kluczowego `default` w języku C#?
- 14. Dlaczego warto używać słowa kluczowego globalnego w języku C#?
- 15. F # odpowiednik słowa kluczowego `is` w języku C#?
- 16. Cuda słowa kluczowego yield
- 17. Jak używać słowa kluczowego "podniesienie" w Pythonie
- 18. rozciąga słowa kluczowego w rodzaju powrotnego w podpis metody Java
- 19. Dlaczego używamy zmiennego słowa kluczowego w C++?
- 20. Alternatywy dla słowa kluczowego "using" w C#?
- 21. Co to jest odpowiednik słowa kluczowego C# 'var w języku Java?
- 22. Interpretacja TypeScript "tego" słowa kluczowego w $ .ajax()
- 23. błąd używając ograniczać słowa kluczowego
- 24. Dlaczego IntPtr nie potrzebuje niebezpiecznego słowa kluczowego?
- 25. Java: czy powinienem użyć "tego" słowa kluczowego lub przedrostka "m_"?
- 26. Odpowiednik "this" lub "self" w R
- 27. Skorzystanie z tego słowa kluczowego do dziedziczenia?
- 28. Z WYJĄKTU słowa kluczowego w Oracle
- 29. Używanie domyślnego słowa kluczowego w bibliotece DLL
- 30. Wyszukiwanie słowa kluczowego w wiki GitHub
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)'. –
@Junior Bill gates: To tylko jedno poprawne użycie słowa kluczowego "this". – paulsm4