zl程序教程

您现在的位置是:首页 >  后端

当前栏目

java中this的用法示例(关键字this)

JAVA 示例 用法 关键字 this
2023-06-13 09:15:24 时间

this是指向本身的隐含的指针,简单的说,哪个对象调用this所在的方法,那么this就是哪个对象。

示例代码:TestThis_1.java

复制代码代码如下:


/*问题:什么是this
 *输出结果:
 *A@4e44ac6a
 */

publicclassTestThis_1{
   publicstaticvoidmain(String[]args){
       Aaa=newA();
       System.out.println(aa.f());//aa.f(),返回aa这个对象的引用(指针)
   }  
}

classA{
   publicAf(){
       returnthis; //返回调用f()方法的对象的A类对象的引用
   }  
}

this的常见用法

1.区分同名变量

示例代码:TestThis_2.java

复制代码代码如下:


/*this的常见用法1:区分同名变量
 *输出结果:
 *this.i=1
 *i=33
 */
publicclassTestThis_2{
   publicstaticvoidmain(String[]args){
       Aaa=newA(33);
   }  
}

classA{
   publicinti=1;                                          //这个i是成员变量

   /*注意:一般不这么写,构造函数主要是为了初始化,这么写主要是为了便于理解*/
   publicA(inti){                                          //这个i是局部变量
       System.out.printf("this.i=%d\n",this.i);           //this.i指的是对象本身的成员变量i
       System.out.printf("i=%d\n",i);                      //这里的i是局部变量i
   }  
}

2.构造方法间的相互调用

示例代码:TestThis_3.java

复制代码代码如下:
/*this的常见用法2:构造方法中互相调用*/
publicclassTestThis_3{
   publicstaticvoidmain(String[]args){

   }  
}

classA{
   inti,j,k;
   publicA(inti){
       this.i=i;
   }  

   publicA(inti,intj){
       /*i=3; error  如果不注释掉就会报错:用this(...)调用构造方法的时候,只能把它放在第一句
        *TestThis_3.java:20:error:calltothismustbefirststatementinconstructor
        *     this(i);
        *                 ^
        *                 1error
        */
       this(i);   
       this.j=j;
   }  

   publicA(inti,intj,intk){
       this(i,j);
       this.k=k;
   }  
}

注意事项

被static修饰的方法没有this指针。因为被static修饰的方法是公共的,不能说属于哪个具体的对象的。

示例代码:TestThis_4.java

复制代码代码如下:
/*static方法内部没有this指针*/
publicclassTestThis_4{
   publicstaticvoidmain(String[]args){

   }  
}

classA{
   staticAf(){
       returnthis;
       /*出错信息:TestThis_4.java:10:error:non-staticvariablethiscannotbereferencedfromastaticcontext
        *         returnthis;
        *                    ^
        *                    1error
        */
   }  
}