当前位置: 首页 > news >正文

妙用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 方法除外,因为静态成员本来就不依赖实例化对象才能调用)

转载于:https://www.cnblogs.com/zhuangmingnan/p/8120938.html

相关文章:

  • 南宁seo教程:巧用页面更新机制保障快照更新
  • JVM原理讲解和调优
  • Microsoft's Office - ATC Shanghai
  • memcached与redis区别
  • openstack-6:安装keystone、memcache和注册keystone
  • SpringBoot 对Future模式的支持
  • 20.4. tex2page
  • 在python中使用zookeeper管理你的应用集群
  • Docker启动/停止/进入容器的常见操作
  • 小论面向对象编程方法
  • git 下载代码到本地
  • Nginx安装、默认虚拟主机、用户认证、域名重定向
  • 七周七数据库
  • Android FM模块学习之四源码分析(八)
  • 初识MongoDB分片
  • [译]Python中的类属性与实例属性的区别
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS 三角实现
  • JavaScript学习总结——原型
  • Making An Indicator With Pure CSS
  • Spring Cloud Feign的两种使用姿势
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • webgl (原生)基础入门指南【一】
  • 给github项目添加CI badge
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 诡异!React stopPropagation失灵
  • 爬虫模拟登陆 SegmentFault
  • 微信小程序--------语音识别(前端自己也能玩)
  • 项目实战-Api的解决方案
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (27)4.8 习题课
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (汇总)os模块以及shutil模块对文件的操作
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .htaccess 强制https 单独排除某个目录
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • @SuppressWarnings(unchecked)代码的作用
  • [100天算法】-不同路径 III(day 73)
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [AIGC] Spring Interceptor 拦截器详解
  • [BT]BUUCTF刷题第8天(3.26)
  • [Django 0-1] Core.Checks 模块
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日