Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 351|回复: 0

[Java基础知识]谈谈 Java 中 this 的使用

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-9-30 22:46:23 | 显示全部楼层 |阅读模式
    1.  this是指当前对象自己。
         当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用。如下面这个例子中:

      

      
      public class A {

       String s = "Hello";
       
       public A(String s) {
         System.out.println("s = " + s);
         System.out.println("1 -> this.s = " + this.s);
         this.s = s;
         System.out.println("2 -> this.s = " + this.s);
       }
       
       public static void main(String[] args) {
         new A("HelloWorld!");
       }
    }

    运行结果:

      
      
       
       
       

       
      
      

    s = HelloWorld!
    1 -> this.s = Hello
    2 -> this.s = HelloWorld!

         在这个例子中,构造函数A中,参数s与类A的变量s同名,这时如果直接对s进行操作则是对参数s进行操作。若要对类A的变量s进行操作就应该用this进行引用。运行结果的第一行就是直接对参数s进行打印结果;后面两行分别是对对象A的变量s进行操作前后的打印结果。

    2.  把this作为参数传递
         当你要把自己作为参数传递给别的对象时,也可以用this。如:

    public class A {
       public A() {
         new B(this).print();
       }
       
       public void print() {
         System.out.println("Hello from A!");
       }
    }

    public class B {
       A a;
       public B(A a) {
         this.a = a;
       }
       
       public void print() {
         a.print();
         System.out.println("Hello from B!");
       }
    }

    运行结果:
    Hello from A!
    Hello from B!

         在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。

    3.  注意匿名类和内部类中的this。
         有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。如下面这个例子:

    public class A {
       int i = 1;

       public A() {
         Thread thread = new Thread() {
           public void run() {
             for(;;) {
               A.this.run();
               try {
                 sleep(1000);
               } catch(InterruptedException ie) {
               }
             }
           }
         };
         thread.start();
       }   

       public void run() {
         System.out.println("i = " + i);
         i++;
       }

       public static void main(String[] args) throws Exception {
         new A();
       }

    }

         在上面这个例子中, thread 是一个匿名类对象,在它的定义中,它的 run 函数里用到了外部类的 run 函数。这时由于函数同名,直接调用就不行了。这时有两种办法,一种就是把外部的 run 函数换一个名字,但这种办法对于一个开发到中途的应用来说是不可取的。那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-13 13:05 , Processed in 0.360580 second(s), 35 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表