Java code style this

this keyword in Java

this is a keyword in Java. It can be used inside the method or constructor of a class. It(this) works as a reference to the current object, whose method or constructor is being invoked. This keyword can refer to any member of the current object from within an instance method or a constructor.

this keyword with a field(Instance Variable)

this keyword in java can be handy in the handling of Variable Hiding. We can not create two instances/local variables with the same name. However, it is legal to create one instance variable & one local variable or Method parameter with the same name. In this scenario, the local variable will hide the instance variable; this is called Variable Hiding.

Example of Variable Hiding

class JBT < int variable = 5; public static void main(String args[]) < JBT obj = new JBT(); obj.method(20); obj.method(); >void method(int variable) < variable = 10; System.out.println("Value of variable :" + variable); >void method() < int variable = 40; System.out.println("Value of variable :" + variable); >>

The output of the above program

Value of variable :10 Value of variable :40

As you can see in the example above, the instance variable is hiding, and the value of the local variable (or Method Parameter) is displayed, not the instance variable. To solve this problem, use this keyword to point to the instance variable instead of the local variable.

Читайте также:  HTML Image as link

Example of this keyword in Java for Variable Hiding

class JBT < int variable = 5; public static void main(String args[]) < JBT obj = new JBT(); obj.method(20); obj.method(); >void method(int variable) < variable = 10; System.out.println("Value of Instance variable :" + this.variable); System.out.println("Value of Local variable :" + variable); >void method() < int variable = 40; System.out.println("Value of Instance variable :" + this.variable); System.out.println("Value of Local variable :" + variable); >>

The output of the above program

Value of Instance variable :5 Value of Local variable :10 Value of Instance variable :5 Value of Local variable :40

this Keyword with Constructor

“this” keyword can be used inside the constructor to call another overloaded constructor in the same class. It is called the Explicit Constructor Invocation. This occurs if a Class has two overloaded constructors, one without argument and another with the argument. Then this” keyword can call the constructor with an argument from the constructor without argument. This is required as the constructor cannot be called explicitly.

Example of this with Constructor

class JBT < JBT() < this("JBT"); System.out.println("Inside Constructor without parameter"); >JBT(String str) < System.out .println("Inside Constructor with String parameter as " + str); >public static void main(String[] args) < JBT obj = new JBT(); >>

The output of the above program

Inside Constructor with String parameter as JBT Inside Constructor without parameter 

As you can see, “this” can invoke an overloaded constructor in the same class.

  • this keyword can only be the first statement in Constructor.
  • A constructor can have either this or super keyword but not both.

this Keyword with Method

this keyword can also be used inside Methods to call another Method from the same Class.

Example of this keyword with Method

class JBT < public static void main(String[] args) < JBT obj = new JBT(); obj.methodTwo(); >void methodOne() < System.out.println("Inside Method ONE"); >void methodTwo() < System.out.println("Inside Method TWO"); this.methodOne();// same as calling methodOne() >>

The output of the above program

Inside Method TWO Inside Method ONE

Example of this keyword as a Method parameter

public class JBTThisAsParameter < public static void main(String[] args) < JBT1 obj = new JBT1(); obj.i = 10; obj.method(); >> class JBT1 extends JBTThisAsParameter < int i; void method() < method1(this); >void method1(JBT1 t) < System.out.println(t.i); >> 

If you understood this keyword correctly, the next step should be to understand the Static Keyword in Java from Java Tutorial.

References
1- Official Document

Next Post
Java Static Keyword

70 thoughts on “this keyword in Java”

class car
int speed;
car()
speed=70;
>
protected void finalize()
System .out.println(“destroy object of car”);
>
>
class bike
int speed;
bike()
speed=70;
>
protected void finalize()
System.out.println(“destroy object of bike”)
>
>
class Garbage_Collection
public static void main(String []args)
car c=new car();
bike b=new bike();
b=null;
System.gc();
System.out.println(“speed of car: “+c.speed);
>
>

class JBT <
public static void main(String[] args) <
JBT obj = new JBT();
obj.methodTwo();
>
void methodOne() <
System.out.println(“Inside Method ONE”);
>
void methodTwo() <
System.out.println(“Inside Method TWO”);
this.methodOne();// same as calling methodOne()
>
> when I removed ‘this’ from the line this.methodOne();// same as calling methodOne() I get the same output. Is this the standard behaviour ?

Yes, that is standard behavior. this is just used to point to the current object and in this case, it is the current object’s method. So it will get called.

Источник

Using the this Keyword

Within an instance method or a constructor, this is a reference to the current object — the object whose method or constructor is being called. You can refer to any member of the current object from within an instance method or a constructor by using this .

Using this with a Field

The most common reason for using the this keyword is because a field is shadowed by a method or constructor parameter.

For example, the Point class was written like this

but it could have been written like this:

Each argument to the constructor shadows one of the object’s fields — inside the constructor x is a local copy of the constructor’s first argument. To refer to the Point field x , the constructor must use this.x .

Using this with a Constructor

From within a constructor, you can also use the this keyword to call another constructor in the same class. Doing so is called an explicit constructor invocation. Here’s another Rectangle class, with a different implementation from the one in the Objects section.

public class Rectangle < private int x, y; private int width, height; public Rectangle() < this(0, 0, 1, 1); > public Rectangle(int width, int height) < this(0, 0, width, height); > public Rectangle(int x, int y, int width, int height) < this.x = x; this.y = y; this.width = width; this.height = height; >. >

This class contains a set of constructors. Each constructor initializes some or all of the rectangle’s member variables. The constructors provide a default value for any member variable whose initial value is not provided by an argument. For example, the no-argument constructor creates a 1×1 Rectangle at coordinates 0,0. The two-argument constructor calls the four-argument constructor, passing in the width and height but always using the 0,0 coordinates. As before, the compiler determines which constructor to call, based on the number and the type of arguments.

If present, the invocation of another constructor must be the first line in the constructor.

Источник

Кофе-брейк #236. Ключевое слово this в Java: способы и примеры использования

Java-университет

Кофе-брейк #236. Ключевое слово this в Java: способы и примеры использования - 1

Источник: Medium Благодаря этому руководству вы узнаете о предназначении ключевого слова this в Java, как и где его использовать на основе практических примеров. В Java ключевое слово this используется для ссылки на текущий объект внутри метода или конструктора. Например:

 class Main < int instVar; Main(int instVar)< this.instVar = instVar; System.out.println("this reference = " + this); >public static void main(String[] args) < Main obj = new Main(8); System.out.println("object reference terminal">this reference = Main@23fc625e object reference = Main@23fc625e
В приведенном выше примере мы создали объект с именем obj класса Main. Затем мы печатаем ссылку на объект obj и ключевое слово this класса. Как мы видим, ссылка на obj и на this одинаковая. Это означает, что this является ссылкой на текущий объект.

Использование ключевого слова this

Существуют несколько ситуаций, в которых используется ключевое слово this.

1. Использование this для различия наименований переменных

В Java не разрешается объявлять две или более переменных с одинаковым именем внутри области видимости (области действия класса или области действия метода). Однако переменные и параметры экземпляра могут иметь одно и то же имя. Вот пример:
 class MyClass < // переменная экземпляра int age; // параметр MyClass(int age)< age = age; >> 

В этой программе переменная экземпляра и параметр имеют одно и то же имя: age . Поэтому компилятор Java сбит с толку. Чтобы решить проблему мы используем ключевое слово this . Но сначала давайте взглянем на пример, где this не используется:

 class Main < int age; Main(int age)< age = age; >public static void main(String[] args) < Main obj = new Main(8); System.out.println("obj.age terminal">obj.age = 0
В приведенном выше примере мы передали конструктору значение 8. Тем не менее, на выходе мы получаем 0. Это связано с тем, что компилятор Java запутался из-за неоднозначности имен между экземпляром переменной и параметром. Теперь давайте перепишем этот код, используя ключевое слово this.
 class Main < int age; Main(int age)< this.age = age; >public static void main(String[] args) < Main obj = new Main(8); System.out.println("obj.age terminal">obj.age = 8
Теперь мы получили вполне ожидаемый результат. Это связано с тем, что при вызове конструктора this внутри него заменяется объектом obj, который вызывает конструктор. Следовательно, переменной age присваивается значение 8. Кроме того, если имя параметра и переменной экземпляра различаются, компилятор автоматически добавляет ключевое слово this. Перед вами пример кода:
 class Main < int age; Main(int i) < age = i; >> 

2. Ключевое слово this с геттерами и сеттерами

Еще одно распространенное использование ключевого слова this — в методах классов setter и getter . Например:

 class Main < String name; // метод setter void setName( String name ) < this.name = name; >// метод getter String getName() < return this.name; >public static void main( String[] args ) < Main obj = new Main(); // вызов метода setter и getter obj.setName("Toshiba"); System.out.println("obj.name: "+obj.getName()); >> 
  • чтобы присвоить значение внутри метода setter
  • для доступа к значению внутри метода getter

3. Использование this в перегрузке конструктора

При работе с перегрузкой конструктора нам может потребоваться вызвать один конструктор из другого конструктора. В данном случае мы не можем вызвать конструктор явно. Вместо этого мы должны использовать this в виде другой формы ключевого слова, то есть this() . Рассмотрим пример кода:

 class Complex < private int a, b; // конструктор с двумя параметрами private Complex( int i, int j )< this.a = i; this.b = j; >// конструктор с одним параметром private Complex(int i) < // вызывает конструктор с двумя параметрами this(i, i); >// конструктор без параметров private Complex() < // вызывает конструктор с одним параметром this(0); >@Override public String toString() < return this.a + " + " + this.b + "i"; >public static void main( String[] args ) < // создание объекта класса Complex // вызов конструктора с двумя параметрами Complex c1 = new Complex(2, 3); // вызывает конструктор с одним параметром Complex c2 = new Complex(3); // вызывает конструктор без параметров Complex c3 = new Complex(); // выводим объекты System.out.println(c1); System.out.println(c2); System.out.println(c3); >> 
  • вызова конструктора Complex(int i, int j) из конструктора Complex(int i)
  • вызова конструктора Complex(int i) из конструктора Complex()

Здесь, когда мы печатаем объект c1 , то объект преобразуется в строку. В этом процессе вызывается toString() . Поскольку мы переопределяем метод toString() внутри нашего класса, то мы получаем вывод в соответствии с этим методом. Одним из огромных преимуществ this() является уменьшение количества дублирующегося кода. Тем не менее, мы всегда должны быть осторожны, если решаем использовать this() . Это связано с тем, что вызов конструктора из другого конструктора добавляет сложность и сам по себе является довольно медленным процессом. Примечание. Вызов одного конструктора из другого конструктора называется явным вызовом конструктора.

4. Передача this в качестве аргумента

Мы также можем использовать ключевое слово this для передачи текущего объекта в качестве аргумента метода. Перед вами пример кода:

 class ThisExample < // объявление переменных int x; int y; ThisExample(int x, int y) < // присваиваем значения переменных внутри конструктора this.x = x; this.y = y; // значение x и y перед вызовом add() System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); // вызываем метод add(), передав this в качестве аргумента add(this); // значение x и y после вызова add() System.out.println("After passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y terminal">Перед передачей this методу addTwo(): x = 1, y = -2 После передачи this методу addTwo(): x = 3, y = 0
В этом примере обратите внимание на строку внутри конструктора ThisExample():
 add(this); 

В ней мы вызываем метод add() , передавая this в качестве аргумента. Поскольку это ключевое слово содержит ссылку на объект класса obj , мы можем изменить значение x и y внутри метода add() .

Источник

Оцените статью