• Java this关键字


    this 关键字有三个应用:
      1.this调用本类中的属性,也就是类中的成员变量
      2.this调用本类中的其他方法
      3.this调用本类中的其他构造方法,调用时要放在构造方法的首行

    来看下面这段代码:
    public String name;
    
    public void showName(String name) {
        System.out.println(name);
    }
    

    上面的代码中有个叫name的成员变量,也有个同样叫name的方法参数。那么showName方法会输出参数的name还是成员变量name呢?

    测试代码:

    Foo foo = new Foo();
    foo.name = "张三";
    foo.showName("李四");
    

    运行结果:

    李四
    

    运行结果显示答案是会输出参数的name,原因是Java语法获取变量的时候采取的是就近原则所以name代表的是离它最近的参数name。如果想要输出成员变量name怎么办,把参数名name改了吗?那又得多想一个变量名多麻烦啊。还好Java提供了this关键字可以引用类的对象。


    把上面的代码改成:

    public String name;
    
    public void showName(String name) {
        System.out.println("我是方法参数:" + name);
        System.out.println("我是类的属性:" + this.name);
    }
    

    运行结果:

    我是方法参数:李四
    我是类的属性:张三
    

    可以看出this关键字代表调用改方法的对象,此时相当于对象foo。

    再来看一个例子。

    public Foo returnThis() {
        return this;
    }
    
    public Foo getInstance() {
        return new Foo();
    }
    

    测试代码:

    Foo foo = new Foo();
    
    Foo foo2 = foo.returnThis();
    Foo foo3 = foo.getInstance();
    System.out.println("foo和foo2是同一对象吗? --> " + (foo == foo2));
    System.out.println("foo和foo3是同一对象吗? --> " + (foo == foo3));
    

    运行结果:

    foo和foo2是同一对象吗? --> true
    foo和foo3是同一对象吗? --> false
    

    这个例子很明确的说明了“this关键字代表调用改方法的对象”,该例子中return this返回的是调用该方法的对象也就是foo,所以foo2和foo指向的是同一对象。而 new Foo是创建一个新的Foo对象。所以foo3和foo并不指向同一对象。

     

  • 相关阅读:
    C#语法相比其它语言比较独特的地方
    Git源码管理工具使用
    2018年第九届蓝桥杯题目(C/C++B组)汇总
    Unity插件系列之二维码
    在本机使用虚拟机安装一个linux系统,并搭建ftp服务器
    用UE4蓝图制作FPS_零基础学虚幻4第二季
    【坦克大战】Unity3D多人在线游戏(泰课的坦克大战--旋转的螺丝钉)
    Drag(拖拽)和Move(移动)两个脚本
    解决:Word在试图打开文件时遇到错误
    2018年的一些记录,共勉
  • 原文地址:https://www.cnblogs.com/Zombie-Xian/p/6245543.html
Copyright © 2020-2023  润新知