妙用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关键字的更多相关文章

  1. Java【小考】

    课上, 老师出了一个题: 考察:1.类的定义 2.类的属性 3.类的方法.重载.构造方法.代码块 题目是这样的: 设计 一个 类:Tree 要求: 1.包含main方法 2.属性:静态: String ...

  2. 深入探讨 Python 的 import 机制:实现远程导入模块

        深入探讨 Python 的 import 机制:实现远程导入模块 所谓的模块导入( import ),是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 在 Python 中使用 ...

  3. 作为一个新手的Oracle(DBA)学习笔记【转】

    一.Oracle的使用 1).启动 *DQL:数据查询语言 *DML:数据操作语言 *DDL:数据定义语言 DCL:数据控制语言 TPL:事务处理语言 CCL:指针控制语言 1.登录 Win+R—cm ...

  4. 延宕执行,妙用无穷,Go lang1.18入门精炼教程,由白丁入鸿儒,Golang中defer关键字延迟调用机制使用EP17

    先行定义,延后执行.不得不佩服Go lang设计者天才的设计,事实上,defer关键字就相当于Python中的try{ ...}except{ ...}finally{...}结构设计中的finall ...

  5. [妙味JS基础]第二课:for应用、this关键字

    知识点总结 getElementsByTagName(动态方法) 与 getElementById(静态方法) 的区别 1.ID前面只能跟document,不能跟其他元素,比如:document.ge ...

  6. Promise的前世今生和妙用技巧

    浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一 ...

  7. 教你如何利用分布式的思想处理集群的参数配置信息——spring的configurer妙用

    引言 最近LZ的技术博文数量直线下降,实在是非常抱歉,之前LZ曾信誓旦旦的说一定要把<深入理解计算机系统>写完,现在看来,LZ似乎是在打自己脸了.尽管LZ内心一直没放弃,但从现状来看,需要 ...

  8. 课程3——程序结构关键字

    声明:本系列随笔主要用于记录c语言的常备知识点,不能保证所有知识正确性,欢迎大家阅读.学习.批评.指正!!你们的鼓励是我前进的动力.严禁用于私人目的.转载请注明出处:http://www.cnblog ...

  9. 求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) 分析:这题本来很 ...

随机推荐

  1. Touch Handling in Cocos2D 3.x(二)

    接受触摸 在Cocos2d 3.0中每一个CCNode和每一个CCNode的子类都可以接收触摸.你只需要开启一个选项.让我们在定制的初始化器里完成它.替换MainScene.m中init方法的代码: ...

  2. 在IFrame中查找IFRAME中的元素的方式

    下面是内部iframe找外部mainFrame的情况  var websiteSearchButton = window.parent.parent.document.getElementById(' ...

  3. Mahout系列之----共轭梯度预处理

    对于大型矩阵,预处理是很重要的.常用的预处理方法有: (1) 雅克比预处理 (2)块状雅克比预处理 (3)半LU 分解 (4)超松弛法

  4. PLSQL_R12 MOAC多组织的四个应用(案例)

    一.摘要 R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,如有遗漏还请学友继续补充 1. 开发时打开Form自动弹出组织选择实现方式(增加C ...

  5. Adobe Premiere 基本使用

    第一节   Premiere概述 1.1概述 Premiere是Adobe公司出品的一款用于进行影视后期编辑的软件,是数字视频领域普及程度最高的编辑软件之一.对于学生媒体而言,Premiere完全可以 ...

  6. ubuntu virtualbox xp无声音解决

    太简单了,记录一下解决方法,进入xp,打开设备管理器,对着ac97设备驱动 点右键,点更新驱动,更新一下就ok了. 这时候去控制面板,就可以看到有音频设备了. 具体步骤如下: 第一步,virtualb ...

  7. 【Visual C++】游戏编程学习笔记之五:单一背景滚动

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...

  8. 真机测试遇到0xE8008016错误修改方法

    错误描述 真机测试过程中,更换Provisioning Profile之后,出现错误:The entitlements specified in your application's Code Sig ...

  9. Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)

    Context Manager介绍 Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来 ...

  10. linux下创建且挂载光盘镜像

    在linux下可以很方便的将多个文件,或多个文件夹下的内容打包进光盘镜像中,我们可以用: mkisofs -r -v -o xxx.iso /root /home 命令将/root以及/home目录下 ...