Я пытаюсь понять, что на самом деле имеет ключевое слово java this
.
Я читал документацию Sun, но я все еще не понял, что на самом деле делает this
.
Использование ключевого слова "this" в java
Ответ 1
Ключевое слово this
- это ссылка на текущий объект.
class Foo
{
private int bar;
public Foo(int bar)
{
// the "this" keyword allows you to specify that
// you mean "this type" and reference the members
// of this type - in this instance it is allowing
// you to disambiguate between the private member
// "bar" and the parameter "bar" passed into the
// constructor
this.bar = bar;
}
}
Еще один способ подумать о том, что ключевое слово this
похоже на личное местоимение, которое вы используете для ссылки на себя. Другие языки имеют разные слова для одной и той же концепции. VB использует Me
и соглашение Python (поскольку Python не использует ключевое слово, просто неявный параметр для каждого метода) заключается в использовании self
.
Если вы хотите ссылаться на объекты, которые по своей сути принадлежат вам, вы бы сказали примерно следующее:
Моя рука или нога
Подумайте о this
как о простом типе, чтобы сказать "мой". Таким образом, представление psuedocode будет выглядеть так:
class Foo
{
private int bar;
public Foo(int bar)
{
my.bar = bar;
}
}
Ответ 2
Ключевое слово this
может означать разные вещи в разных контекстах, что, вероятно, является источником вашей путаницы.
Его можно использовать как ссылку на объект, которая ссылается на экземпляр, на который был вызван текущий метод: return this;
Он может использоваться как ссылка на объект, которая ссылается на экземпляр, создаваемый текущим конструктором, например. для доступа к скрытым полям:
MyClass(String name)
{
this.name = name;
}
Он может использоваться для вызова другого конструктора класса a из конструктора:
MyClass()
{
this("default name");
}
Его можно использовать для доступа к экземплярам экземпляров из вложенного класса:
public class MyClass
{
String name;
public class MyClass
{
String name;
public String getOuterName()
{
return MyClass.this.name;
}
}
}
Ответ 3
"this" - ссылка на текущий объект.
Подробнее здесь
Ответ 4
Ключевое слово this
- это ссылка на текущий объект. Это лучше всего объясняется следующим фрагментом кода:
public class MyClass {
public void testingThis()
{
// You can access the stuff below by
// using this (although this is not mandatory)
System.out.println(this.myInt);
System.out.println(this.myStringMethod());
// Will print out:
// 100
// Hello World
}
int myInt = 100;
string myStringMethod()
{
return "Hello World";
}
}
Он не использовался много, если у вас нет стандартного кода, говорящего вам использовать ключевое слово this
. Для этого есть одно общее применение, и если вы следуете кодовому соглашению, в котором у вас есть имена параметров, которые совпадают с вашими атрибутами класса:
public class ProperExample {
private int numberOfExamples;
public ProperExample(int numberOfExamples)
{
this.numberOfExamples = numberOfExamples;
}
}
Одним правильным использованием этого ключевого слова является создание конструкторов цепей (создание конструктивного объекта, согласованного по всем конструкторам):
public class Square {
public Square()
{
this(0, 0);
}
public Square(int x_and_y)
{
this(x_and_y, x_and_y);
}
public Square(int x, int y)
{
// finally do something with x and y
}
}
Это ключевое слово работает так же, как, например, С#.
Ответ 5
Еще лучше использовать этот
public class Blah implements Foo {
public Foo getFoo() {
return this;
}
}
Он позволяет вам конкретно "this" объект в текущем контексте. Другой пример:
public class Blah {
public void process(Foo foo) {
foo.setBar(this);
}
}
Как еще вы могли бы выполнять эти операции.
Ответ 6
"this" ключевое слово относится к текущему объекту, из-за которого этот метод выполняется. Он также используется, чтобы избежать двусмысленности между локальной переменной, переданной как аргумент в переменной метода и экземпляра, когда переменная экземпляра и локальная переменная имеют одинаковое имя.
Пример:
public class ThisDemo1
{
public static void main(String[] args)
{
A a1=new A(4,5);
}
}
class A
{
int num1;
int num2;
A(int num1)
{
this.num1=num1; //here "this" refers to instance variable num1.
//"this" avoids ambigutiy between local variable "num1" & instance variable "num1"
System.out.println("num1 :: "+(this.num1));
}
A(int num, int num2)
{
this(num); //here "this" calls 1 argument constructor within the same class.
this.num2=num2;
System.out.println("num2 :: "+(this.num2));
//Above line prints value of the instance variable num2.
}
}
Ответ 7
Ключевое слово 'this' относится к контексту текущего объекта. Во многих случаях (поскольку Andrew указывает), вы будете использовать явное это, чтобы было ясно, что вы ссылаетесь на текущий объект.
Кроме того, из this и super ':
* Для этого существуют другие виды использования. Иногда, когда вы пишете метод экземпляра, вам необходимо передать объект, содержащий этот метод, в подпрограмму в качестве фактического параметра. В этом случае вы можете использовать это как фактический параметр. Например, если вы хотите распечатать строковое представление объекта, вы можете сказать "System.out.println(this);". Или вы можете присвоить значение этой переменной другой переменной в инструкции присваивания.
Фактически вы можете сделать что-нибудь с этим, что вы можете сделать с любой другой переменной, кроме изменения ее значения. *
Этот сайт также ссылается на связанную концепцию "супер", что может оказаться полезным для понимания того, как они работают с наследованием.
Ответ 8
Это ссылка фактического экземпляра класса внутри метода того же класса. кодирования
public class A{
int attr=10;
public int calc(){
return this.getA()+10;
}
/**
*get and set
**/
}//end class A
В языке calc() программное обеспечение запускает метод внутри выделенного объекта.
Как возможно, что поведение объекта может увидеть себя? С ключевым словом this.
Действительно, это ключевое слово не требует обязательного использования (как супер), потому что JVM знает, где вызов метода в области памяти, но, на мой взгляд, это делает код более понятным.
Ответ 9
Это может быть также способ доступа к информации о текущем контексте. Например:
public class OuterClass
{
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
OuterClass()
{
InnerClass ic = new InnerClass(this);
}
class InnerClass
{
InnerClass(OuterClass oc)
{
System.out.println("Enclosing class: " + oc + " / " + oc.getClass());
System.out.println("This class: " + this + " / " + this.getClass());
System.out.println("Parent of this class: " + this.getClass().getEnclosingClass());
System.out.println("Other way to parent: " + OuterClass.this);
}
}
}
Ответ 10
Подумайте об этом с точки зрения английского языка, "этот объект" - это тот объект, который у вас есть.
WindowMaker foo = new WindowMaker(this);
Например, вы находитесь внутри класса, который выходит из JFrame, и вы хотите передать ссылку на объект WindowMaker для JFrame, чтобы он мог взаимодействовать с JFrame. Вы можете передать ссылку на JFrame, передав ее ссылку на объект, который называется "this".
Ответ 11
Каждый объект может получить доступ к ссылке на себя с ключевым словом this (иногда это называется ссылка).
Сначала давайте посмотрим на код
public class Employee {
private int empId;
private String name;
public int getEmpId() {
return this.empId;
}
public String getName() {
return this.name;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public void setName(String name) {
this.name = name;
}
}
В приведенном выше методе getName() возвращает имя переменной экземпляра. Теперь давайте еще раз взглянуть на похожий код
public class Employee {
private int empId;
private String name;
public int getEmpId() {
return this.empId;
}
public String getName() {
String name="Yasir Shabbir";
return name;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public void setName(String name) {
this.name = name;
}
public static void main(String []args){
Employee e=new Employee();
e.setName("Programmer of UOS");
System.out.println(e.getName());
}
}
Выход Ясир Шаббир
- этот оператор всегда работает с переменной экземпляра (Belong to Object) не любая переменная класса (принадлежит классу)
- это всегда относится к классу нестационарного атрибута, а не к любому другому параметру или локальной переменной.
- это всегда используется в нестационарном методе
- этот оператор не может работать с статической переменной (переменная класса)
** ПРИМЕЧАНИЕ: ** Часто это логическая ошибка, когда метод содержит параметр или локальную переменную, которая имеет то же имя, что и поле класса. В этом случае используйте ссылку, если вы хотите получить доступ к поле класса - иначе будет указан параметр метода или локальная переменная.
Ответ 12
Что делает 'this' очень просто. В нем содержится ссылка на текущие объект.
- Это ключевое слово содержит ссылку на экземпляр текущего класса
- Это ключевое слово не может использоваться внутри статической функции или статических блоков
- Это ключевое слово можно использовать для доступа к теневой переменной экземпляра
- Это ключевое слово может использоваться для передачи текущего объекта в качестве параметра при вызове функций
- Это ключевое слово можно использовать для создания цепочки конструкторов
Источник: http://javaandme.com/core-java/this-word