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并不指向同一对象。

 

转载于:https://www.cnblogs.com/Zombie-Xian/p/6245543.html

Java this关键字相关推荐

  1. java的关键字和保留字_「Java」详解常见的53个关键字

    1.在Java中目前一共有53个关键字: 其中由51+2个保留字=53个关键字 [友情提示 : Java的关键字都是小写哟] 2.Java的保留字有多少个?分别是什么? 答:Java的保留字有2个,J ...

  2. java的关键字与保留字

    参考:java的关键字和保留字 关键字上文介绍的很详细. 保留字:

  3. java的同步关键字_简单了解Java synchronized关键字同步

    简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记:  synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...

  4. Java volatile关键字原理解剖

    Java volatile关键字原理解剖 文章目录 Java volatile关键字原理解剖 参考文章 前置知识 CPU缓存模型 CPU缓存行 并发编程基本概念 Java锁概念 volatile关键字 ...

  5. java class 关键字_java关键字及其作用

    一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...

  6. java super关键字简述

    java super关键字简述 super关键字访问父类属性,访问权限必须是允许的 super关键字访问父类属性,访问权限必须是允许的 当创建子类对象时,默认调用父类的无参构造方法,除非显式调用父类的 ...

  7. java this关键字的使用

    java this关键字的使用 /*** this关键字的使用*/ public class Student {//成员变量private int sno; //学号private String na ...

  8. java控制关键字continue,break,return

    java控制关键字continue,break,return /*** break 可以停止循环继续执行 只能停止最内层的循环* 如果想停止外层for循环 需要给外层循环做标记* continue 停 ...

  9. Java instanceof关键字详解

    严格来说 instanceof 是 Java 中的一个双目运算符,由于它是由字母组成的,所以也是 Java 的保留关键字.在 Java 中可以使用 instanceof 关键字判断一个对象是否为一个类 ...

  10. 面试官系统精讲Java源码及大厂真题 - 03 Java 常用关键字理解

    03 Java 常用关键字理解 引导语 Java 中的关键字很多,大约有 50+,在命名上我们不能和这些关键字冲突的,编译会报错,每个关键字都代表着不同场景下的不同含义,接下来我们挑选 6 个比较重要 ...

最新文章

  1. 机器人编程语言python-机器人编程语言有哪些?
  2. aliyun maven 添加jar_阿里云Maven配置,Maven仓库配置,Maven镜像配置
  3. 电子设计竞赛电源题(4)-Buck与Boost电路
  4. Hive数据类型及文本文件数据编码
  5. 论文浅尝 | ICLR 2020 - 图神经网络的预训练策略
  6. 关于rabbitmq的介绍
  7. 新手python的100个实战项目-实例分享 | 4个Python实战项目(一)
  8. 小猿日记 - 程序猿的日常日记(2)
  9. Word中规范输入大写的中文日期(转)
  10. 1区SCI潜力刊,中科院分区即将更新,有望冲击2区
  11. 正在准备面试?快手三面面试真题,搞懂这些直接来阿里入职
  12. flink 消费 kafka offset 自动提交
  13. 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合
  14. 2021年四川高考成绩等位分查询,2021年四川高考成绩查询网站查分网址:https://www.sceea.cn/...
  15. 启动word 2016时弹出“很抱歉,此功能看似已中断,并需要修复......”解决方案
  16. FTP服务器架设教程之管理篇
  17. Windows Phone 7与Android和iPhone的比较
  18. 泛世纪上英语,计算机,日语的录制课程。欢迎来下载
  19. 对抗谷歌地图:Nokia Maps正式登陆iPhone
  20. 清华大学文件服务器,UserFiles深圳清华大学研究院招标文件-云存储服务器.doc.doc...

热门文章

  1. EM算法(Expectation Maximization Algorithm)
  2. Flex4_HttpService组件
  3. MongoDB分组查询,聚合查询,以及复杂查询
  4. 洛谷 P4011 孤岛营救问题【最短路+分层图】
  5. SDOI2010 地精部落
  6. LVS--NAT模型配置
  7. servlet中getWriter和getOutputStream的区别
  8. 解压版本的tomcat服务安装
  9. 【转】Tomcat+MyEclipse
  10. Ajax — 第五天