一.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关键字总结的更多相关文章

  1. Java 并发 关键字volatile

    Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchroniz ...

  2. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  3. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  4. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  5. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  6. [Java并发编程(三)] Java volatile 关键字介绍

    [Java并发编程(三)] Java volatile 关键字介绍 摘要 Java volatile 关键字是用来标记 Java 变量,并表示变量 "存储于主内存中" .更准确的说 ...

  7. java的关键字与保留字

    1,Java 关键字列表 (依字母排序 共50组): abstract, assert, boolean, break, byte, case, catch, char, class, const(保 ...

  8. 深入java final关键字

    Java final关键字详解:https://blog.csdn.net/kuangay/article/details/81509164 深入java final关键字 用法注意点和JVM对其进行 ...

  9. Java Synchronized 关键字

    本文内容 Synchronized 关键字 示例 Synchronized 方法 内部锁(Intrinsic Locks)和 Synchronization 参考资料 下载 Demo Synchron ...

  10. java transient关键字作用,使用场景。

    java transient关键字作用,使用场景. 2016年08月31日 15:31:10 阅读数:4280 transient的作用及使用方法,官方解释为: Variables may be ma ...

随机推荐

  1. asp.net mvc 传值

    视图的查找 asp.net MVC 不需要用using 释放资源

  2. C#与.NET、CLR、CLI是什么关系?什么是.NET框架

    1.C#与.NET.CLR.CLI是什么关系?什么是.NET框架?      这个问题好专业啊!一句话两句话还真不好说清.您听说过C++中有个COM的概念吧?您听说过JAVA里的虚拟机吧?CLR(公共 ...

  3. SqlServer 数据库备份到服务器,及删除

    一:备份 1.在数据库管理下 新建一个维护计划,然后下图中点击 标红的按钮 新建计划作业,建好后就可以 SqlServer 代理下的作业里可以看到刚新建的作业. 2.SqlServer 代理下的作业  ...

  4. 刷题-力扣-213. 打家劫舍 II

    213. 打家劫舍 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-ii/ 著作权归领扣网络所有.商业 ...

  5. go协程调度

    目录 前言 1. 线程池的缺陷 2.Goroutine 调度器 3.调度策略 3.1 队列轮转 3.2 系统调用 3.3 工作量窃取 4.GOMAXPROCS设置对性能的影响 参考 前言 Gorout ...

  6. 你的域名是如何变成 IP 地址的?

    我的 个人网站 上线了,上面可以更好的检索历史文章,并且可以对文章进行留言,欢迎大家访问 可能大家都知道或者被问过一个问题,那就是很经典的「从浏览器输入 URL 再到页面展示,都发生了什么」.这个问题 ...

  7. Mysql时间戳转Java时间戳

    MySQL 时间戳和Java返回的时间戳是不一样的 例如: 当前时间是 2014-08-04 10:42:55.204000 使用mysql时间戳函数UNIX_TIMESTAMP 返回的结果为: 14 ...

  8. Mybatis-技术专区-如何清晰的解决出现「多对一模型」和「一对多模型」的问题

    前提介绍 在mybatis如何进行多对一.一对多(一对一)的多表查询呢?本章带你认识如何非常顺滑的解决! 基础使用篇 一对一 association association通常用来映射一对一的关系,例 ...

  9. linux centos7 tail

    2021-08-30 # 不指定行数,默认显示 10 行 # 显示 /var/log/crond 后100行 taile -100 /var/log/crond # 动态显示 /var/log/cro ...

  10. multipass指定virualbox搭建k8s集群(选择docker作为默认容器)

    目录 前言 步骤 初始化三台虚拟机 统一安装docker 修改docker镜像源 查看masterIP 安装master节点(重点设置) 查看master的token 安装worker节点 测试 部署 ...