妙用this关键字
妙用this关键字
## this关键字
一般this关键字都是指的是对象的本身,在类的所有方法、构造器都可以拿到this引用,这是jvm“偷偷“帮我们传递进来的引用,指向调用方法对象的本身。
this 关键字只能方法内部调用,表示对“调用那个方法的对象”的引用。
## this可以用在哪里
1. 方法的链式调用
2. 将当前对象传递给其他方法
------------
1. 方法的链式调用
举个例子有这个一个类,类中有一个递增的成员:
public class Leaf{
int i = 0;
Leaf increment(){
i++;
return this;
}
}
那这个时候我们调用就可以这样:
new Leaf().increment().increment().increment();
通过这样,在一条语句中便可以对一个对象调用多个方法,实现方法的链式调用;
2. 将当前对象传递给其他方法
当当前对象的某个方法需要其他的对象的操作参与进来的时候,这个时候可以将本对象在方法中委托给其他对象进行操作
例如:
class Person{
public void eat(Apple apple){
Apple peeled = apple.getPeeled();
System.out.println("Ymmy");
}
}
class Peeler{
static Apple peel(Apple apple){
// ... remove peel
return apple;
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this); // 将本对象交由Peeler操作,但是不用显式传递对象的引用进入每个方法
}
}
public class PassingThis{
public static void main(String[] args){
new Person().eat(new Apple());
}
}
## 总结
this关键字可以实现对某个类对象进行一系列的方法调用,他的原理就是每个方法执行完成之后都会将对象的引用返回,所以 return this的方法中都是返回一个对象;
this关键字可以不用在方法中显式传入自身的引用,在类的每个方法(static 方法除外,因为静态成员本来就不依赖实例化对象才能调用)
妙用this关键字的更多相关文章
- Java【小考】
课上, 老师出了一个题: 考察:1.类的定义 2.类的属性 3.类的方法.重载.构造方法.代码块 题目是这样的: 设计 一个 类:Tree 要求: 1.包含main方法 2.属性:静态: String ...
- 深入探讨 Python 的 import 机制:实现远程导入模块
深入探讨 Python 的 import 机制:实现远程导入模块 所谓的模块导入( import ),是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 在 Python 中使用 ...
- 作为一个新手的Oracle(DBA)学习笔记【转】
一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...
- 延宕执行,妙用无穷,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中defer关键字延迟调用机制使用EP17
先行定义,延后执行.不得不佩服Go lang设计者天才的设计,事实上,defer关键字就相当于Python中的try{ ...}except{ ...}finally{...}结构设计中的finall ...
- [妙味JS基础]第二课:for应用、this关键字
知识点总结 getElementsByTagName(动态方法) 与 getElementById(静态方法) 的区别 1.ID前面只能跟document,不能跟其他元素,比如:document.ge ...
- Promise的前世今生和妙用技巧
浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...
- 教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用
引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要 ...
- 课程3——程序结构关键字
声明:本系列随笔主要用于记录c语言的常备知识点,不能保证所有知识正确性,欢迎大家阅读.学习.批评.指正!!你们的鼓励是我前进的动力.严禁用于私人目的.转载请注明出处:http://www.cnblog ...
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...
随机推荐
- [加密]在AES的CBC模式下 pydes vs crypto
因为项目中有个非常重要的功能,并发量和访问量都很大,里面使用了pydes,总感觉它的性能不太好,从别人的对比来看,性能差距应该挺大,但还是自己测试下吧. 自己测试,心里更有数. 环境 macos 10 ...
- 《java入门第一季》之正则表达式常见规则
正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) ...
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- Java图形界面编程生成exe文件
1. 先将代码打成jar,然后使用exe4j转成exe ext4j下载 链接:http://pan.baidu.com/s/1kTCIZtX 密码:pvj1 打开EXE4J Advanced Opti ...
- CentOS安装并设置MariaDB
作者: 铁锚 日期: 2013年12月27日 部分参考: Centos 使用YUM安装MariaDB 说明: 首先必须能链接外网. 如果不能直接访问,那也可以设置代理,请参考: 在内网机器上设置yum ...
- 《java入门第一季》之面向对象综合小案例
需求: /* 教练和运动员案例 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 跟乒乓球相关的人员都需要学习英语. 分析,这 ...
- Weka 算法大全
关联规则挖掘 (一) Apriori (二) FilteredAssociator (三) FPGrowth (四) GeneralizedSequentislPatterns (五) Pr ...
- 【Matlab编程】生日快乐歌(显示歌词)—matlab版
clear all A4=440;%标准音A4 不同的曲调音调不同scale的取值范围不同 pt=44100;p0=pt/2;%频率 scale=A4/2^(9/12)*2.^((-12:11)/12 ...
- ITU-T Technical Paper: IP服务性能模型
本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...
- 安卓TV开发(概述) 智能电视之视觉设计和体验分析
转载说明出处 :http://blog.csdn.net/sk719887916, 作者:skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大 ...