在java中,编译器会为每个对象分配一个this关键字。在代码中使用关键字可以使代码更优雅。下面我就列举一下this关键字常见的几种场景。

1、this代表当前对象调用成员变量和方法,也是用的最多的地方。

 package demo;
/**
* 测试this代表当前对象调用成员变量和方法
* @author dyf
*
*/
public class TestThis {
private String name;
private int age; void eat(){
System.out.println("刘二狗正在吃饭!");
} void print(String name,int age){
this.name = name; //区分成员变量和参数
this.age = age;
this.eat(); //this代表当前对象
System.out.println(name + "今年" + age);
} public static void main(String[] args) {
//初始化对象的时候就会调用无参构造器
TestThis tt = new TestThis();
tt.print("刘二狗",18);
}
}

打印结果:

2、代表当前对象的句柄,如果你希望将句柄返回给当前对象,就可以在return中使用。也就是说当你使用某个对象执行一个方法,需要在方法内执行逻辑代码,但是最后又希望拿到该对象的句柄并对同一对象执行多项操作。

 package demo;
/**
* 测试this代表当前句柄并返回给当前对象
* @author dyf
*
*/
public class TestThis {
private int i = 0;
//返回当前对象的方法
TestThis test(){
//执行这个方法,我们可以在里面做大量的操作之后再把句柄返回给当前对象
i++;
return this;
}
//打印的方法
void print(){
System.out.println("i = " + i);
} public static void main(String[] args) {
TestThis tt = new TestThis();
tt.test().test().test().print();
}
}

打印结果:

3、若同一个类中写了多个构造器,我们可能需要在一个构造器里调用另一个构造器。为了避免写重复的代码使程序更优雅,我们使用this可以做到。this不能调用两个构造器。

代码如下:

 package demo;
/**
* 测试this在构造器里面调用其他构造器
* @author dyf
*
*/
public class TestThis {
private int count = 0;
private String str = new String("null"); TestThis(int num){
count = num;
System.out.println("带有整形参数的构造器"+count);
} TestThis(String s){
System.out.println("带有字符串参数的构造器"+s);
} TestThis(String str,int number){
this(number); //调用带有整形参数的构造器
//this(ss); //不能在一个构造器里面同时调用两个构造器
//为了避免成员变量str和参数str混淆,使用this可以避免
this.str = str;
this.count = number;
System.out.println("String && int args");
} TestThis(){
this("hello",18);//调用带有两个参数的构造器
System.out.println("无参构造器");
} void print(){
System.out.println("count = " + count + " --- " + "str = " + str);
} public static void main(String[] args) {
//初始化对象的时候就会调用无参构造器
TestThis tt = new TestThis();
tt.print();
}
}

打印结构:

this关键字详解的更多相关文章

  1. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  2. python关键字详解

    今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...

  3. Java面试题04-final关键字详解

    Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...

  4. Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.

    在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...

  5. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系

    本文关键词: java continue break 关键字 详解 区别  用法 标记  标签 使用 示例 联系   跳出循环 带标签的continue和break 嵌套循环  深入continue ...

  6. mysql中文、英文别名排序问题,order by 关键字详解

    order by 关键字详解:   SELECT intcode AS 商品编码, product_title AS 名称, retailprice AS 零售价, purchaseprice AS ...

  7. Java多线程(三)—— synchronized关键字详解

    一.多线程的同步 1.为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资 ...

  8. java关键字详解----static

    Java Static关键字详解   提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... ...

  9. Delphi、Lazarus保留字、关键字详解

    Delphi.Lazarus保留字.关键字详解 来自橙子,万一的博客以及其他地方 保留字:变量等标识符可以再使用: 关键字:有特定含义,不能再次重新定义: 修饰字:类似保留字的功能,也就是说可以重用 ...

  10. “全栈2019”Java多线程第十六章:同步synchronized关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. PNG透明兼容IE6的几种方法

    方法一:css方式,写一个属性hack,使用滤镜来解决png在ie6下不兼容的问题. _filter: progid:DXImageTransform.Microsoft.AlphaImageLoad ...

  2. Constructor Acquires, Destructor Releases Resource Acquisition Is Initialization

    w https://zh.wikipedia.org/wiki/RAII RAII要求,资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配(获取),同时由析构函数完成资源的 ...

  3. python系列十四:Python3 文件

    #!/usr/bin/python #Python3 文件 from urllib import requestimport pprint,pickle'''读和写文件open() 将会返回一个 fi ...

  4. 批处理 ECHO命令输出空行

    众所周知,如果echo后面跟一个环境变量,但是该变量却为空时,相当于不加任何参数的echo,即输出当前echo是on还是off.很多文章或者教程给出的解决方案都是在echo后面加一个点号echo.,这 ...

  5. Centos6.3下Ganglia3.6.0安装配置

    近期安装Ganglia.因为之前Linux基础基本为0.因此费了非常大的周折.最后在失败了好多次之后最终看到了梦寐以求的web界面.以下总结下这几天来的工作. ganglia是一个监控软件,他包括三部 ...

  6. 二值法方法综述及matlab程序

    在某些图像处理当中一个关键步是二值法,二值化一方面能够去除冗余信息,另一方面也会使有效信息丢失.所以有效的二值化算法是后续的处理的基础.比如对于想要最大限度的保留下面图的中文字,以便后续的定位处理. ...

  7. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  8. PDO:数据访问抽象层

    <?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...

  9. solr、Lucene、IKAnalyzer这三者关系是怎样的?

    lucene 是开源搜索引擎 solr 是基于 lucene开发的搜索引擎 IK 是中文分词. lucene 不是一个搜索引擎,只是一个基础的文件索引工具包,或者叫“搜索引擎开发包”.不能单独作为程序 ...

  10. java MD5Utils 加密工具类

    package com.sicdt.library.core.utils; import java.io.File; import java.io.FileInputStream; import ja ...