妙用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) 分析:这题本来很 ...
随机推荐
- UNIX环境高级编程——进程基本概述
一.什么是进程 从用户的角度来看进程是程序的一次执行过程.从操作系统的核心来看,进程是操作系统分配的内存.CPU时间片等资源的基本单位.进程是资源分配的最小单位.每一个进程都有自己独立的地址空间与执行 ...
- Uva - 177 - Paper Folding
If a large sheet of paper is folded in half, then in half again, etc, with all the folds parallel, t ...
- 【Unity Shaders】Using Textures for Effects——通过修改UV坐标来滚动textures
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 【Unity Shaders】Diffuse Shading——在Surface Shader中使用properties
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- 一篇详细的linux中shell语言的字符串处理
1 cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要 ...
- 【翻译】了解ASP.NET MVC中的Ajax助手
原文:Understanding AJAX Helpers in ASP.NET MVC 作者: Shailendra Chauhan works as Software Analyst at rep ...
- cocos2dv2项目转换为ARC支持的项目
原帖地址: http://www.cnblogs.com/liufan9/archive/2013/04/08/3006580.html
- iOS 10正式发布:十大新功能,更注重人性化
6月14日凌晨消息,苹果公司举行2016年WWDC全球开发者大会,介绍了watch OS.tv OS.OS X以及iOS 10系统的新特性. 据苹果介绍,iOS 10在锁屏.Siri.地图等十个各方面 ...
- Linux进程管理 - ps,top,pstree,signal,kill,killall举例演示
ps:将某个时间点的进程运行情况撷取下来 [root@www ~]# ps aux <==观察系统所有的进程数据 [root@www ~]# ps -lA <==也是能够观察所有系统的数据 ...
- 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套
一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...