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 ...
随机推荐
- leaflet 的 marker 弹框 iframe 嵌套代码
A页面 嵌套 B页面的代码 主要处理 leaflet 的 marker 的 popopen, marker的点击的显示/隐藏 pop 会导致pop中的页面的内容,消失,不在页面中,导致b ...
- HashTable原理和底层实现
1. 概述 上次讨论了HashMap的结构,原理和实现,本文来对Map家族的另外一个常用集合HashTable进行介绍.HashTable和HashMap两种集合非常相似,经常被各种面试官问到两者的区 ...
- 从元素抽取属性,文本和HTML
问题 在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据. 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的 ...
- 防止XSS 攻击集成springboot
1.配置相关数据 在配置文件中配置 # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice/* # 匹 ...
- C#多线程---线程池的工作者线程
一.线程池简介 创建和销毁线程是一个要耗费大量时间的过程,太多的线程也会浪费内存资源,所以通过Thread类来创建过多的线程反而有损于性能,为了改善这样的问题 ,.net中就引入了线程池. 线程池形象 ...
- Java 方法使用
那么什么是方法呢? Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的优点 1. 使程序变得更简 ...
- 一、vue基础语法(轻松入门vue)
轻松入门vue系列 Vue基础语法 一.HelloWord 二.MVVM设计思想 三.指令 1. v-cloak 2. v-text 3. v-html 4. v-show 4. v-pre 5. v ...
- (一)响应式web设计。。。freecodecamp笔记
HTML基础 HTML 的全称是 HyperText Markup Language(超文本标记语言),它是一种用来描述网页结构的标记语言. h1用作主标题,h2用作副标题,还有h3.h4.h5.h6 ...
- ProjectEuler 009题
题目: A Pythagorean triplet is a set of three natural numbers, a b c, for which, a2 + b2 = c2 For exam ...
- rabbitMq镜像集群
rabbitMq延迟投递的方案 1 把消息记录到数据路,通过定时器进行刷新 2 TTL 加上死信队列 :通过路由把过期的消息同步到死信队列,通过死信队列的消费者进行消费 3