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 ...
随机推荐
- mfc 常用的知识点
在MFC中引入了文档-视结构的概念,文档相当于数据容器,视相当于查看数据的窗口或是和数据发生交互的窗口.因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDoc ...
- C#多线程详解(二)
在上一节介绍了线程的基础知识,下面来研究多线程的优先级 using System; using System.Threading;namespace Test{ class TestThread ...
- uwp 语音指令
Xml code -------------------------------- <Page x:Class="MyApp.MainPage" xmlns="ht ...
- Java随手记录
Spring @Configuration注解及配置方法 转自:https://www.jb51.net/article/184822.htm Spring @Configuration注解 Spri ...
- File--字节流--字符流
File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.构造方法 public File(String pathname) :通过将给定 ...
- 使用dom4j工具:读取xml标签(二)
package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Document; import or ...
- java 常用Bean 转换工具类
package com.hnf.framework.utils; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.data ...
- 如何打一个RPM包
如何打一个RPM包 参考链接:RPM打包原理.示例.详解及备查 前言 本文只是一个RPM安装的例子,并没有对RPM做比较详尽的叙述,更为详尽的讲解,可以在上面的链接中找到. RPM是啥? RPM(Re ...
- vmware 配置不同网段双网卡。
一.前言 需求:由于LVS演练需要,需要配置两张linux OS网卡,而且是不同网段. 准备: 物理机:单网卡 VMware:centos 6.8 二.配置 第一步:新建虚拟机VMware,cento ...
- promise例题
let promise = new Promise(resolve => { console.log('Promise'); resolve(); }); promise.then(functi ...