Java——this关键字总结
一.this关键字的使用
1.当同类型的对象a和b,调用相同的方法method()时,为了区分该方法是被a调用还是被b调用
如下代码中,:
class Banana { void method(int i) { /* ... */ } }
Banana a = new Banana(), b = new Banana();
a.method(1);
b.method(2);
编译期内部的过程:
1 Banana.method(a,1);
2 Banana.method(b,2);
方法的参数列表中的第一个参数即为调用该方法的对象的句柄(引用),编译期会以此来区分方法的调用
可类比Python类中方法的关键字self,
2.this 关键字(注意只能在方法内部使用)可为已调用了其方法的那个对象生成相应的句柄。可以向对待其他任
何 对象句柄一样对待这个句柄。
假如从本类中调用某一个方法时,可以省略this关键字,代码如下
1 class Apricot {
2 void pick() { /* ... */ }
3 void pit() { pick(); /* ... */ }
4 }
this 关键字只能 用于那些特殊的类——需明确使用当前对象的句柄。例如,假若您希望将句柄返回给当前对
象,那么它经常在return 语句中使用。代码如下:
1 public class Leaf {
2 private int i = 0;
3 Leaf increment() {
4 i++;
5 return this;
6 }
7 void print() {
8 System.out.println("i = " + i);
9 }
10 public static void main(String[] args) {
11 Leaf x = new Leaf();
12 x.increment().increment().increment().print();
13 }
14 }
increment()通过 this 关键字返回当前对象的句柄,所以可以方便地对同一个对象执行多项操作
3.this 关键字在构造函数中进行调用
3.1 虽然可用this 调用构建函数,但同一个构造函数里不可调用两个。
3.2 构造函数在类加载过程中是第一个进行加载的,否则会收到编译程序的报错信息
3.3 可用 this来引用成员数据。经常都会在 Java 代码里看到这种应用,避免成员变量和方法参数之间的混淆
3.4 编译器不容许从除了一个构建器之外的其他任何方法内部调用一个构造函数
代码如下:
1 public class Flower {
2 private int petalCount = 0;
3 private String s = new String("null");
4
5 Flower(int petals) {
6 petalCount = petals;
7 System.out.println("Constructor w/ int arg only petalCount="+ petalCount);
8 }
9 Flower(String ss) {
10 System.out.println("Constructor w/ String arg only, s=" + ss);
11 s = ss;
12 }
13
14 Flower(String s, int petals) {
15 this(petals);
16 // ! this(s); // Can't call two!
17 this.s = s; // Another use of "this"
18 System.out.println("String & int args");
19 }
20
21 Flower() {
22 this("hi", 47);
23 System.out.println("default constructor (no args)");
24 }
25
26 void print() {
27 // ! this(11); // Not inside non-constructor!
28 System.out.println("petalCount = " + petalCount + " s = " + s);
29 }
30
31 public static void main(String[] args) {
32 Flower x = new Flower();
33 x.print();
34 }
35 }
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 ...
随机推荐
- 三:ServletContext对象
一.ServletContext对象 1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象 内部封装是该w ...
- 字符串拷贝函数递归与非递归的C语言实现
初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出.既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句.... ...
- linux(1)------vmvear虚拟机安装linux
1.VMvare14(个人下载,软件付费,自行解决) 2.CentOS下载 https://www.centos.org/download/ 官方网址,后期会跳转本地镜像站 ...
- springcloud starter(一)
Spring Cloud - Getting Started Example, 转载自:https://www.logicbig.com/tutorials/spring-framework/spri ...
- 运行uni-app到微信开发者工具
1.工具及环境 HBuilder X 微信开发者工具 Node.js,测试:node -v(node安装) 和 npm -v(自带的npm也安装成功) 2.创建uni-app项目: 在点击工具栏里的文 ...
- python--接口自动化经常用到的pytest框架
pytest常用的方法和原理 1.pytest的原理 pytest插件基于pluggy模块:pluggy有三个重要概念:HookspecMarker(用来定义hook函数),HookimplMarke ...
- Git使用教程四
拉取线上仓库 :git pull 提醒: 在每天工作的第一件事就是先git pull拉取线上最新·的版本: 每天下班前要做的是git push,将本地代码提交到线上仓库. 有兴趣可以关注一下微信公众号
- Windows下Rancher复制Pod内文件到本地
Rancher 未提供直接获取 Pod 内文件的工具(如果有请评论告知下,蟹蟹),但提供了 Rancher 的 CLI 客户端,通过 CLI 可以调用 k8s 的 CLI (kubectl) 命令来操 ...
- Linux下SSH以及SSH秘钥
一.基于秘钥方式实现远程连接 第一步:创建密钥对(在管理端服务器上操作) 中间的输入项可以直接回车 ssh-keygen -t dsa 第二步:分发公钥(在管理端服务器执行) 这个步骤需要输入一个ye ...
- Docker(36)- docker run 的流程和原理
背景 目前项目组上, Docker 用的非常重,所有微服务都是通过 docker 来部署的 所以不能仅仅会命令,还得会一些原理的东西,特此补一篇基础点的,后面再更加深入一些 docker 原理 本篇学 ...