猿教程 Logo

Java this关键词

java this关键字可能有很多的用法。 在java中,this是一个引用当前对象的引用变量。


java this关键字的用法

这里给出了6个java this关键字的用法。

  1. this可以用来引用当前类的实例变量。

  2. this可以用于调用当前类方法(隐式)

  3. this()可以用来调用当前类的构造函数。

  4. this可以作为方法调用中的参数传递。

  5. this可以作为参数在构造函数调用中传递。

  6. this可以用于从方法返回当前类的实例。



1)this:引用当前类的实例变量

this关键字可以用来引用当前类的实例变量。 如果实例变量和参数之间存在歧义,则this关键字解决歧义问题。

了解没有this关键字的问题

让我们来理解问题,通过下面的例子来看看如果我们不使用this关键字:

class Student{
int rollno;
String name;
float fee;
Student(int rollno,String name,float fee){
rollno=rollno;
name=name;
fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}
class TestThis1{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

输出:

0 null 0.0
0 null 0.0

在上面的例子中,参数(形式参数)和实例变量是相同的。 所以,我们使用this关键字来区分局部变量和实例变量。

this关键字解决了上面的问题)

相关实例:

class Student{
int rollno;
String name;
float fee;
Student(int rollno,String name,float fee){
this.rollno=rollno;
this.name=name;
this.fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}

class TestThis2{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

输出:

111 ankit 5000
112 sumit 6000

如果局部变量(形式参数)和实例变量不同,则不需要使用this关键字:

不需要this关键字的程序

相关实例:

class Student{
int rollno;
String name;
float fee;
Student(int r,String n,float f){
rollno=r;
name=n;
fee=f;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}

class TestThis3{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

输出:

111 ankit 5000
112 sumit 6000

对变量使用有意义的名称是更好的方法。 所以我们实时使用同名的实例变量和参数,并且总是使用this关键字。


2)this:调用当前类方法

您可以使用this关键字调用当前类的方法。 如果不使用this关键字,编译器会在调用方法时自动添加此关键字。 让我们看看这个例子


相关实例:

class A{
void m(){System.out.println("hello m");}
void n(){
System.out.println("hello n");
//m();//same as this.m()
this.m();
}
}
class TestThis4{
public static void main(String args[]){
A a=new A();
a.n();
}}

输出:

hello n
hello m

3)this():调用当前类的构造函数

this()构造函数调用可以用来调用当前类的构造函数。 它用于重用构造函数。 换句话说,它用于构造函数链接。

从参数化构造函数调用默认构造函数:

class A{
A(){System.out.println("hello a");}
A(int x){
this();
System.out.println(x);
}
}
class TestThis5{
public static void main(String args[]){
A a=new A(10);
}}

输出:

hello a
10

从默认构造函数调用参数化构造函数:

class A{
A(){
this(5);
System.out.println("hello a");
}
A(int x){
System.out.println(x);
}
}
class TestThis6{
public static void main(String args[]){
A a=new A();
}}

输出:

5
hello a

实际使用this()构造函数调用

this()构造函数调用应该用于从构造函数重用构造函数。 它维护构造函数之间的链,即它用于构造函数链接。 让我们看看下面给出的示例,显示此this键字的实际使用。

class Student{
int rollno;
String name,course;
float fee;
Student(int rollno,String name,String course){
this.rollno=rollno;
this.name=name;
this.course=course;
}
Student(int rollno,String name,String course,float fee){
this(rollno,name,course);//reusing constructor
this.fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+course+" "+fee);}
}
class TestThis7{
public static void main(String args[]){
Student s1=new Student(111,"ankit","java");
Student s2=new Student(112,"sumit","java",6000f);
s1.display();
s2.display();
}}

输出:

111 ankit java null
112 sumit java 6000

规则:调用this()必须是构造函数中的第一个语句。

相关实例:

class Student{
int rollno;
String name,course;
float fee;
Student(int rollno,String name,String course){
this.rollno=rollno;
this.name=name;
this.course=course;
}
Student(int rollno,String name,String course,float fee){
this.fee=fee;
this(rollno,name,course);//C.T.Error
}
void display(){System.out.println(rollno+" "+name+" "+course+" "+fee);}
}
class TestThis8{
public static void main(String args[]){
Student s1=new Student(111,"ankit","java");
Student s2=new Student(112,"sumit","java",6000f);
s1.display();
s2.display();
}}
Compile Time Error: Call to this must be first statement in constructor

4)this:作为参数传递给方法

this关键字也可以作为方法中的参数传递。 它主要用于事件处理。 让我们看一个例子:

相关实例:

class S2{
  void m(S2 obj){
  System.out.println("method is invoked");
  }
  void p(){
  m(this);
  }
  public static void main(String args[]){
  S2 s1 = new S2();
  s1.p();
  }
}

输出:

method is invoked

this可以作为参数传递:

在事件处理(或类似)的情况下,我们必须提供一个类的引用到另一个。 它用于在许多方法中重用一个对象。


5)this:在构造函数调用中作为参数传递

我们也可以在构造函数中传递this关键字。 如果我们必须在多个类中使用一个对象,这是有用的。 让我们看一个例子:

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

6)this关键字可以用来返回当前类的实例

我们可以从方法中将this关键字作为语句返回。 在这种情况下,方法的返回类型必须是类类型(非原始)。 让我们看一个例子:


可以作为语句返回的语法

相关实例:

return_type method_name(){
return this;
}

this关键字的例子,你可以从方法的声明返回

相关实例:

class A{
A getA(){
return this;
}
void msg(){System.out.println("Hello java");}
}
class Test1{
public static void main(String args[]){
new A().getA().msg();
}
}

输出:

Hello java

验证this关键字

让我们证明this关键字引用当前类的实例变量。 在这个程序中,我们打印参考变量,这两个变量的输出是相同的。

相关实例:

class A5{
void m(){
System.out.println(this);//prints same reference ID
}
public static void main(String args[]){
A5 obj=new A5();
System.out.println(obj);//prints the reference ID
obj.m();
}
}

输出:

A5@22b3ea59
A5@22b3ea59


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/this-keyword-in-java.html