Обычно я использую this
только в конструкторах.
Я понимаю, что он используется для идентификации переменной параметра (с помощью this.something
), если она имеет то же имя, что и глобальная переменная.
Однако я не знаю, что на самом деле означает this
Java и что произойдет, если я буду использовать this
без точки ( .
).
Ответы:
this
относится к текущему объекту.Каждый нестатический метод запускается в контексте объекта. Итак, если у вас есть такой класс:
public class MyThisTest { private int a; public MyThisTest() { this(42); // calls the other constructor } public MyThisTest(int a) { this.a = a; // assigns the value of the parameter a to the field of the same name } public void frobnicate() { int a = 1; System.out.println(a); // refers to the local variable a System.out.println(this.a); // refers to the field a System.out.println(this); // refers to this entire object } public String toString() { return "MyThisTest a=" + a; // refers to the field a } }
Затем вызов
frobnicate()
наnew MyThisTest()
напечатаемТак эффективно вы используете его для нескольких целей:
источник
main
метод. Если я добавлю основной метод, мне придется звонить оттуда. И любая попытка вызвать frobnicate () внутри main говорит о том, что вы не можете вызвать нестатическую ссылку из статической. И удаление статики изmain
снова возвращает ошибку, что основной метод не найден. Пожалуйста, объясни.this.
работает. Насколько я понимаю, этоthis.
позволяет вам вызывать метод или переменную, уникальную для созданной версии класса, позволяя существовать другой версии метода или переменной, которая вызывается без вызова.this.
В простом вызове уTest.class
меня есть два метода:public static void main()
иpublic Test()
я не может передавать информацию между методами, потому чтоmain
является статическим, а конструкторы не могут быть статическими. Должен ли я опубликовать как новый вопрос?static
означает, что вам не нужен экземпляр класса для его вызова и что у вас не будет доступа кthis
нему.Следующее является копией и вставкой отсюда , но очень хорошо объясняет все варианты использования
this
ключевого слова:Определение: ключевое слово Java
this
используется для ссылки на текущий экземпляр метода, в котором оно используется.Ниже приведены способы использования этого:
Чтобы специально обозначить, что переменная экземпляра используется вместо статической или локальной переменной. То есть,
private String javaFAQ; void methodName(String javaFAQ) { this.javaFAQ = javaFAQ; }
Здесь это относится к переменной экземпляра. Здесь приоритет высок для локальной переменной. Поэтому отсутствие
this
обозначает локальную переменную. Если локальная переменная, являющаяся именем параметра, не совпадает с переменной экземпляра, то независимо от тогоthis
, используется она или нет, она обозначает переменную экземпляра.This
используется для ссылки на конструкторыpublic JavaQuestions(String javapapers) { this(javapapers, true); }
Это вызывает конструктор того же класса Java, который имеет два параметра.
This
используется для передачи текущего экземпляра Java в качестве параметраobj.itIsMe(this);
Подобно приведенному выше, это также можно использовать для возврата текущего экземпляра
CurrentClassName startMethod() { return this; }
Примечание: это может привести к нежелательным результатам при использовании во внутренних классах в двух вышеупомянутых пунктах. Поскольку это будет относиться к внутреннему классу, а не к внешнему экземпляру.
This
может использоваться для получения дескриптора текущего классаClass className = this.getClass(); // this methodology is preferable in java
Хотя это можно сделать
Class className = ABC.class; // here ABC refers to the class name and you need to know that!
Как всегда,
this
связан с его экземпляром, и это не будет работать в статических методах.источник
Для полноты,
this
также может использоваться для ссылки на внешний объектclass Outer { class Inner { void foo() { Outer o = Outer.this; } } }
источник
this
это то, что я искал! ;)super
Он относится к текущему экземпляру определенного объекта, поэтому вы можете написать что-то вроде
public Object getMe() { return this; }
Типичный вариант использования
this
- предотвратить затенение. Возьмем следующий пример:public class Person { private final String name; public Person(String name) { // how would we initialize the field using parameter? // we can't do: name = name; } }
В приведенном выше примере мы хотим назначить член поля, используя значение параметра. Поскольку у них одно и то же имя, нам нужен способ различать поле и параметр.
this
позволяет нам получить доступ к членам этого экземпляра, включая поле.public class Person { private final String name; public Person(String name) { this.name = name; } }
источник
В Swing довольно часто пишут класс, который реализует
ActionListener
и добавляет текущий экземпляр (то есть «this») в качестве ActionListener для компонентов.public class MyDialog extends JDialog implements ActionListener { public MyDialog() { JButton myButton = new JButton("Hello"); myButton.addActionListener(this); } public void actionPerformed(ActionEvent evt) { System.out.println("Hurdy Gurdy!"); } }
источник
Цитата из статьи на programming.guide:
this
имеет два использования в программе Java.1. В качестве ссылки на текущий объект
Синтаксис в этом случае обычно выглядит примерно так
this.someVariable = someVariable;
Этот тип использования описан здесь: Ссылка «это» (с примерами)
2. Чтобы вызвать другой конструктор
Синтаксис в этом случае обычно выглядит примерно так
MyClass() { this(DEFAULT_VALUE); // delegate to other constructor } MyClass(int value) { // ... }
Этот тип использования описан здесь: вызов конструктора this (…) (с примерами)
источник
Фактически, это «ссылка на объект в текущем контексте». Например, чтобы распечатать этот объект, вы можете написать:
System.out.println(this);
Обратите внимание, что ваше использование «глобальной переменной» несколько неуместно ... если вы используете,
this.variableName
то по определению это не глобальная переменная - это переменная, специфичная для этого конкретного экземпляра.источник
Он относится к экземпляру, на котором вызывается метод
class A { public boolean is(Object o) { return o == this; } } A someA = new A(); A anotherA = new A(); someA.is(someA); // returns true someA.is(anotherA); // returns false
источник
Это ключевое слово используется для обозначения текущих переменного блока, например , рассмотрит ниже код (просто exampple, поэтому не ожидайте стандартный JAVA код):
Public class test{ test(int a) { this.a=a; } Void print(){ System.out.println(a); } Public static void main(String args[]){ test s=new test(2); s.print(); } }
Это оно. На выходе будет «2». Если мы не использовали ключевое слово this , то вывод будет: 0
источник
У объектов есть методы и атрибуты (переменные), которые являются производными от классов, чтобы указать, какие методы и переменные принадлежат конкретному объекту, используется
this
зарезервированное слово. В случае переменных экземпляра важно понимать разницу между неявными и явными параметрами. Взгляните наfillTank
призыв кaudi
объекту.Car audi= new Car(); audi.fillTank(5); // 5 is the explicit parameter and the car object is the implicit parameter
Значение в круглых скобках является неявным параметром, а сам объект является явным параметром, методы, которые не имеют явных параметров, используют неявные параметры,
fillTank
метод имеет как явный, так и неявный параметр.Давайте подробнее рассмотрим
fillTank
метод вCar
классеpublic class Car() { private double tank; public Car() { tank = 0; } public void fillTank(double gallons) { tank = tank + gallons; } }
В этом классе у нас есть переменная экземпляра tank. Может быть много объектов, которые используют переменную экземпляра tank, чтобы указать, что переменная экземпляра tank используется для определенного объекта, в нашем случае для объекта «audi», который мы создали ранее, мы используем
this
зарезервированное ключевое слово. для переменных экземпляра использование this в методе указывает, что переменная экземпляра, в нашем случае «tank», является переменной экземпляра неявного параметра.Компилятор java автоматически добавляет
this
зарезервированное слово, поэтому вам не нужно его добавлять, это вопрос ваших предпочтений. Вы не можете использоватьthis
без точки (.), Потому что это правила java (синтаксис).В итоге.
this
на переменной экземпляра в методе указывает на то, что переменная экземпляра принадлежит неявного параметра, или что он является переменной экземпляра неявного параметра.this
нельзя использовать без точки (.) это синтаксически неверноthis
также может использоваться для различения локальных переменных и глобальных переменных с одинаковыми именами.this
зарезервированное слово также относится к способам, чтобы указать способ относится к конкретному объекту.источник
Переменные экземпляра являются общими для каждого создаваемого вами объекта. скажем, есть две переменные экземпляра
class ExpThisKeyWord{ int x; int y; public void setMyInstanceValues(int a, int b) { x= a; y=b; System.out.println("x is ="+x); System.out.println("y is ="+y); } } class Demo{ public static void main(String[] args){ ExpThisKeyWord obj1 = new ExpThisKeyWord(); ExpThisKeyWord obj2 = new ExpThisKeyWord(); ExpThisKeyWord obj3 = new ExpThisKeyWord(); obj1.setMyInstanceValues(1, 2); obj2.setMyInstanceValues(11, 22); obj3.setMyInstanceValues(111, 222); } }
если вы заметили код выше, мы инициировали три объекта, и три объекта вызывают метод SetMyInstanceValues. Как вы думаете, как JVM правильно назначает значения для каждого объекта? есть уловка, JVM не увидит этот код, как показано выше. вместо этого он будет видеть следующий код;
public void setMyInstanceValues(int a, int b) { this.x= a; //Answer: this keyword denotes the current object that is handled by JVM. this.y=b; System.out.println("x is ="+x); System.out.println("y is ="+y); }
источник
(Я знаю, что опаздываю, но шшш, я подлый парень, которого ты никогда не видел)
В Это ключевое слово в большинстве объектно - ориентированных языков программирования , если не все средства , что его ссылка к текущему экземпляру объекта этого класса. По сути, это то же самое, что и вызов этого объекта извне метода по имени. Это, вероятно, не имело смысла, поэтому я уточню:
Вне класса, чтобы вызвать что-то в этом экземпляре объекта, например, скажем, у вас есть объект с именем object, и вы хотите получить поле, которое вам нужно будет использовать
Скажем, например, вы пытаетесь получить доступ к object.field изнутри своего класса, скажем, в вашем конструкторе, например, вы можете использовать
this.field
Это ключевое слово , по существу заменяет имя объекта ключевое слово , когда который вызывается внутри класса. Обычно нет особых причин для этого, если у вас есть две переменные с одинаковым именем, одна из которых является полем класса, а другая - просто переменной внутри метода, это помогает расшифровать между двумя . Например, если у вас есть это: (Ха, понял? Это ? Хе-хе .... только я? Хорошо :( Я уйду)
public String Name; //Constructor for {object} class public object(String Name){ Name = Name; }
Это вызовет некоторые проблемы, компилятор не сможет узнать разницу между переменной Name, определенной в параметрах для конструктора, и переменной Name внутри объявлений полей вашего класса, поэтому вместо этого он назначит параметр Name для .. .. значение параметра Name, которое не делает ничего полезного и буквально не имеет цели. Это обычная проблема, с которой сталкивается большинство новых программ, и я тоже стал жертвой. В любом случае, правильным способом определения этого параметра было бы использование:
public String Name; //Constructor for {object} class public object(String Name){ this.Name = Name; }
Таким образом, компилятор знает, что переменная Name, которую вы пытаетесь назначить, является частью класса, а не частью метода, и назначает ее правильно, то есть он назначает поле Name тому, что вы помещаете в конструктор.
Подводя итог, он по существу ссылается на поле экземпляра объекта класса, над которым вы работаете, следовательно, это ключевое слово «this», означающее его этот объект или этот экземпляр. Это хорошая практика - использовать это при вызове поля вашего класса, а не просто использовать имя, чтобы избежать возможных ошибок, которые трудно найти, поскольку компилятор работает прямо над ними.
источник
Быстрый поиск в Google дал такой результат: http://xahlee.org/java-a-day/this.html
В значительной степени ключевое слово «this» является ссылкой на текущий объект (сам).
источник
this
ссылка на текущий объект: http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.htmlисточник
это можно использовать внутри некоторого метода или конструктора.
Возвращает ссылку на текущий объект.
источник
Это относится к объекту, в котором вы сейчас находитесь. Другими словами, это относится к принимающему объекту. Вы используете это, чтобы уточнить, о какой переменной вы имеете в виду. Java_whitepaper, страница: 37
class Point extends Object { public double x; public double y; Point() { x = 0.0; y = 0.0; } Point(double x, double y) { this.x = x; this.y = y; } }
В приведенном выше примере кода this.x / this.y относится к текущему классу, который представляет собой переменные x и y класса Point, где (double x, double y) - это значения типа double, переданные из другого класса для присвоения значений текущему классу.
источник
Я тоже искал тот же ответ и почему-то не мог четко понять концепцию. Но наконец я понял это из этого ссылки
это ключевое слово в Java. Что можно использовать внутри метода или конструктора класса. Он (это) работает как ссылка на текущий объект, метод или конструктор которого вызывается. это ключевое слово может использоваться для ссылки на любой член текущего объекта из метода экземпляра или конструктора.
Проверьте примеры по ссылке для четкого понимания
источник
Если переменные экземпляра совпадают с переменными, объявленными в конструкторе, мы используем «this» для присвоения данных.
class Example{ int assign;// instance variable Example(int assign){ // variable inside constructor this.assign=assign; } }
Надеюсь это поможет.
источник
В Java «this» - это предопределенная переменная. Если мы используем «this» в методе, это означает, что мы получаем ссылку (адрес) на текущий запущенный объект. Для примера.
this.age ---> возраст текущего запущенного объекта.
источник
Хочу поделиться тем, что я понял из этого ключевого слова. Это ключевое слово имеет 6 применений в java следующим образом: -
1. Его можно использовать для ссылки на текущую переменную класса. Давайте разберемся с кодом. *
Давайте разберемся в проблеме, если мы не будем использовать это ключевое слово в примере, приведенном ниже:
class Employee{ int id_no; String name; float salary; Student(int id_no,String name,float salary){ id_no = id_no; name=name; salary = salary; } void display(){System.out.println(id_no +" "+name+" "+ salary);} } class TestThis1{ public static void main(String args[]){ Employee s1=new Employee(111,"ankit",5000f); Employee s2=new Employee(112,"sumit",6000f); s1.display(); s2.display(); }}
Выход:-
0 null 0.0 0 null 0.0
В приведенном выше примере параметры (формальные аргументы) и переменные экземпляра совпадают. Итак, мы используем это ключевое слово, чтобы различать локальную переменную и переменную экземпляра.
class Employee{ int id_no; String name; float salary; Student(int id_no,String name,float salary){ this.id_no = id_no; this.name=name; this.salary = salary; } void display(){System.out.println(id_no +" "+name+" "+ salary);} } class TestThis1{ public static void main(String args[]){ Employee s1=new Employee(111,"ankit",5000f); Employee s2=new Employee(112,"sumit",6000f); s1.display(); s2.display(); }}
выход:
111 ankit 5000 112 sumit 6000
2. Вызвать метод текущего класса.
class A{ void m(){System.out.println("hello Mandy");} void n(){ System.out.println("hello Natasha"); //m();//same as this.m() this.m(); } } class TestThis4{ public static void main(String args[]){ A a=new A(); a.n(); }}
Выход:
3. вызвать конструктор текущего класса. Он используется для создания цепочки конструкторов.
class A{ A(){System.out.println("hello ABCD");} A(int x){ this(); System.out.println(x); } } class TestThis5{ public static void main(String args[]){ A a=new A(10); }}
Выход:
hello ABCD 10
4. передать как аргумент в метод.
class S2{ void m(S2 obj){ System.out.println("The method is invoked"); } void p(){ m(this); } public static void main(String args[]){ S2 s1 = new S2(); s1.p(); } }
Выход:
5. передать в качестве аргумента при вызове конструктора
class B{ A4 obj; B(A4 obj){ this.obj=obj; } void display(){ System.out.println(obj.data);//using data member of A4 class } } class A4{ int data=10; A4(){ B b=new B(this); b.display(); } public static void main(String args[]){ A4 a=new A4(); } }
Выход:-
10
6. вернуть текущий экземпляр класса
class A{ A getA(){ return this; } void msg(){System.out.println("Hello");} } class Test1{ public static void main(String args[]){ new A().getA().msg(); } }
Выход:-
источник
Как все сказали, это представляет текущий объект / текущий экземпляр. Я понимаю это так, если это просто "this" - он возвращает объект класса, например: Dog, если у него есть this.something, something является методом в этом классе или переменной
class Dog { private String breed; private String name; Dog(String breed, String name) { this.breed = breed; this.name = name; } public Dog getDog() { // return Dog type return this; }
}
источник