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并不指向同一对象。
Java this关键字的更多相关文章
- Java 并发 关键字volatile
Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchroniz ...
- 【转载】java final 关键字的几种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]final关键字的几种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- [Java并发编程(三)] Java volatile 关键字介绍
[Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说 ...
- java的关键字与保留字
1,Java 关键字列表 (依字母排序 共50组): abstract, assert, boolean, break, byte, case, catch, char, class, const(保 ...
- 深入java final关键字
Java final关键字详解:https://blog.csdn.net/kuangay/article/details/81509164 深入java final关键字 用法注意点和JVM对其进行 ...
- Java Synchronized 关键字
本文内容 Synchronized 关键字 示例 Synchronized 方法 内部锁(Intrinsic Locks)和 Synchronization 参考资料 下载 Demo Synchron ...
- java transient关键字作用,使用场景。
java transient关键字作用,使用场景. 2016年08月31日 15:31:10 阅读数:4280 transient的作用及使用方法,官方解释为: Variables may be ma ...
随机推荐
- 使用MyBatis Generator自动创建代码( SSM框架)
步骤: 1.找到该文件目录 (上图文件下载地址:http://download.csdn.net/download/u014617413/9668872) 2.修改generatorConfig.xm ...
- 【Jsoup网页解析】
下载链接:http://jsoup.org/download 一.普通的请求方式(不带有cookie) 使用举例: 第一步: Connection conn=Jsoup.connect(url); 第 ...
- 数据库事务(Database Transaction)概述
事务概念 事务可以用很多很多不同的方式去定义.事务是数据库操作执行的一个逻辑工作单元,是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.例如, 在关系数据库中, 一 ...
- psql-09表:视图和索引
视图 由查询语句定义的虚拟表;从视图中看到的数据可能来自数据库中的一张或多张表,也可能来自外部; 使用视图的原因一般有: 使复制的查询易于理解和使用; 安全原因; 表一些函数返回的结果映射成视图; 一 ...
- Chart图表
这东西挺直观 封装个类 public class aaa { private string name; public string Name { get { return name; } set { ...
- Linux下定时任务配置-crontab
实际中经常有一些任务需要定期执行,人工操作比较麻烦,如果定时执行将会省去很多人力,还可以在一些资源占用不多的时间段执行,linux下crontab命令就实现了这一便捷的功能,实现脚本的自动化运行. 常 ...
- Shell 编程基础之 [ 与 [[ 的异同
一.简介 [ 与 test 等价,是 bash 的内部命令,GNU/linux 系统的 coreutils 软件包通常带 /usr/bin/test 和 /usr/bin/[ 命令.如果我们不用绝对路 ...
- 归一化交叉相关Normalization cross correlation (NCC)
归一化交叉相关Normalization cross correlation (NCC) 相关系数,图像匹配 NCC正如其名字,是用来描述两个目标的相关程度的,也就是说可以用来刻画目标间的相似性.一般 ...
- 浅谈iOS触摸事件理解
iOS的触摸事件个人总结,分为两步: 第一步:是找到哪个视图上触摸 第二步:分析由谁去响应(响应者连) 1.寻找被触摸的视图原理如下图 hitText:withEvent:的方法处理流程: 首先会在当 ...
- android—-线性布局
android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...