this 也是Java中的一个关键字,在《Java编程思想》第四版第五章5.4小节对 this 关键字是这样介绍的:

  this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。

  其实简单来说 this 关键字就是表示当前对象,下面我们来具体介绍 this 关键字在Java中的用法。

1、调用成员变量

  在一个类的方法内部,如果我们想调用其成员变量,不用 this,我们会怎么做?

 package com.ys.test;

 /**
* Create by YSOcean
*/
public class ThisTest { private String name = "Tom"; public void setName(String name){
name = name;
} public String getName() {
return name;
} }

  看上面的代码,我们在 ThisTest 类中创建了一个 name 属性,然后创建了一个 setName 方法,注意这个方法的形参也是 String name,那么我们通过 name = name 这样赋值,会改变成员变量 name 的属性吗?

     public static void main(String[] args) {
ThisTest tt = new ThisTest();
tt.setName("Marry");
System.out.println(tt.getName());//Tom
}

  打印结果是 Tom,而不是我们重新设置的 Marry,显然这种方式是不能在方法内部调用到成员变量的。因为形参的名字和成员变量的名字相同,setName 方法内部的 name = name,根据最近原则,编译器默认是将这两个 name 属性都解析为形参 name,从而导致我们设值操作和成员变量 name 完全没有关系,当然设置不了。

  解决办法就是使用 this 关键字。我们将 setName 方法修改如下:

     public void  setName(String name){
this.name = name;
}

  在调用上面的 main 方法进行赋值,打印的结果就是 Marry 了。

  this 表示当前对象,也就是调用该方法的对象,对象.name 肯定就是调用的成员变量。

2、调用构造方法

  构造方法是与类同名的一个方法,构造方法没有返回值,但是也不能用 void 来修饰。在一个类中,必须存在一个构造方法,如果没有,编译器会在编译的时候自动为这个类添加一个无参构造方法。一个类能够存在多个构造方法,调用的时候根据参数来区分。

 package com.ys.test;

 /**
* Create by YSOcean
*/
public class ThisTest {
private String name; public ThisTest(){
this("Marry");
}
public ThisTest(String name) {
this.name = name;
}
}

  通过 this("Marry") 来调用另外一个构造方法 ThisTest(String name) 来给成员变量初始化赋值。

  注意:通过 this 来调用构造方法,只能将这条代码放在构造函数的第一行,这是编译器的规定,如下所示:放在第二行会报错。

  

3、调用普通方法

  this 表示当前对象,那么肯定能够调用当前类的普通方法。

     public void printName(){
this.say();
} public void say(){
System.out.println("say method...");
}

  第 2 行代码,在 printName() 方法内部调用了 say() 方法。

4、返回当前对象

 /**
* Create by YSOcean
*/
public class ThisTest { public Object newObject(){
return this;
}
}

  这表示的意思是谁调用 newObject() 方法,那么就返回谁的引用。

Java关键字(五)——this的更多相关文章

  1. Java关键字(六)——super

    在 Java关键字(五)——this 中我们说 this 关键字是表示当前对象的引用.而 Java 中的 super 关键字则是表示 父类对象的引用. 我们分析这句话“父类对象的引用”,那说明我们使用 ...

  2. “全栈2019”Java第五十一章:继承与final关键字详解

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

  3. Java关键字总结及详解

    Java关键字是Java的保留字,这些保留字不能用来作为常量.变量.类名.方法名及其他一切标识符的名称. 一.基本数据类型 Java中有八种基本数据类型,六种数字类型(四个整数型.六中浮点型),一种字 ...

  4. “全栈2019”Java第五十章:继承与构造方法详解

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

  5. 我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

    1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

  6. 20165210 Java第五周学习总结

    20165210 Java第五周学习总结 教材学习内容 - 第七章学习总结 内部类: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. 内部类的类体中不可以声明类变 ...

  7. Java关键字final、static

    一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...

  8. java笔记——Java关键字static、final使用小结

    static  1. static变量     按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的 ...

  9. Java关键字

    Java关键字简介 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 exte ...

随机推荐

  1. C++代码利用pthread线程池与curl批量下载地图瓦片数据

    项目需求编写的程序,稳定性有待进一步测试. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐 ...

  2. NDK时间测量

    在NDK中测量时间,有四种方法. LINUX系统方法 gettimeofday 以秒和微秒的形式返回自从Epoch(1970-01-01 00:00:00 +0000 (UTC))时间以来,系统已经经 ...

  3. (网页)HTMl5的sessionStorage和localStorage

    百度上百度的,记录一下: html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(sessi ...

  4. VS调试IDAPython脚本

    本文最后修改时间:20180213 1.安装VS插件PTVS , 这一步与第2步中安装版本应该一致,否则最后调试时会连不上 https://github.com/Microsoft/PTVS/ 2.安 ...

  5. Ext 日期格式化

    //日期格式化 Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), // ...

  6. Scala类型限定

    package big.data.analyse.scala /** * 类型限定 * Created by zhen on 2018/12/9. */ object Lxxd { def main( ...

  7. java----java集合框架图

  8. 自动化测试基础篇--Selenium简单的163邮箱登录实例

    摘自https://www.cnblogs.com/sanzangTst/p/7472556.html 前面几篇内容一直讲解Selenium Python的基本使用方法.学习了什么是selenium: ...

  9. 【公众号系列】SAP S/4 HANA 1809请查收

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP S/4 HANA 1809 ...

  10. Mysql --学习:大量数据快速导入导出

    声明:此文供学习使用,原文:https://blog.csdn.net/xiaobaismiley/article/details/41015783 [实验背景] 项目中需要对数据库中一张表进行重新设 ...