Java关键字(五)——this
this 也是Java中的一个关键字,在《Java编程思想》第四版第五章5.4小节对 this 关键字是这样介绍的:
this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。
其实简单来说 this 关键字就是表示当前对象,下面我们来具体介绍 this 关键字在Java中的用法。
1、调用成员变量
在一个类的方法内部,如果我们想调用其成员变量,不用 this,我们会怎么做?
1 package com.ys.test; 2 3 /** 4 * Create by YSOcean 5 */ 6 public class ThisTest { 7 8 private String name = "Tom"; 9 10 public void setName(String name){ 11 name = name; 12 } 13 14 public String getName() { 15 return name; 16 } 17 18 }
看上面的代码,我们在 ThisTest 类中创建了一个 name 属性,然后创建了一个 setName 方法,注意这个方法的形参也是 String name,那么我们通过 name = name 这样赋值,会改变成员变量 name 的属性吗?
1 public static void main(String[] args) { 2 ThisTest tt = new ThisTest(); 3 tt.setName("Marry"); 4 System.out.println(tt.getName());//Tom 5 }
打印结果是 Tom,而不是我们重新设置的 Marry,显然这种方式是不能在方法内部调用到成员变量的。因为形参的名字和成员变量的名字相同,setName 方法内部的 name = name,根据最近原则,编译器默认是将这两个 name 属性都解析为形参 name,从而导致我们设值操作和成员变量 name 完全没有关系,当然设置不了。
解决办法就是使用 this 关键字。我们将 setName 方法修改如下:
1 public void setName(String name){ 2 this.name = name; 3 }
在调用上面的 main 方法进行赋值,打印的结果就是 Marry 了。
this 表示当前对象,也就是调用该方法的对象,对象.name 肯定就是调用的成员变量。
2、调用构造方法
构造方法是与类同名的一个方法,构造方法没有返回值,但是也不能用 void 来修饰。在一个类中,必须存在一个构造方法,如果没有,编译器会在编译的时候自动为这个类添加一个无参构造方法。一个类能够存在多个构造方法,调用的时候根据参数来区分。
1 package com.ys.test; 2 3 /** 4 * Create by YSOcean 5 */ 6 public class ThisTest { 7 private String name; 8 9 public ThisTest(){ 10 this("Marry"); 11 } 12 public ThisTest(String name) { 13 this.name = name; 14 } 15 }
通过 this("Marry") 来调用另外一个构造方法 ThisTest(String name) 来给成员变量初始化赋值。
注意:通过 this 来调用构造方法,只能将这条代码放在构造函数的第一行,这是编译器的规定,如下所示:放在第二行会报错。
3、调用普通方法
this 表示当前对象,那么肯定能够调用当前类的普通方法。
1 public void printName(){ 2 this.say(); 3 } 4 5 public void say(){ 6 System.out.println("say method..."); 7 }
第 2 行代码,在 printName() 方法内部调用了 say() 方法。
4、返回当前对象
1 /** 2 * Create by YSOcean 3 */ 4 public class ThisTest { 5 6 public Object newObject(){ 7 return this; 8 } 9 }
这表示的意思是谁调用 newObject() 方法,那么就返回谁的引用。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java 学习(12)--接口
一、接口 (1)猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的, 这种额外的功能, java提供了接口表示。 (2)接口的特点: A:接口用关键字 interface修饰 interface 接口名 {} B:类实现接口用 implements修饰 class类名 implements 接口名 {} C:接口不能实例化 ,类可以有多个接口 D:接口的实现类 a:是一个抽象类。b: 是一个具体类,这个类必须重写接口中的所有抽象方法。 (3)接口的成员特点: A:成员变量 只能是常量,不能是变量 默认修饰符: public static final(默认添加) B:构造方法 没有构造方法,接口主要是拓展功能的,没有具体存在 C:成员方法 只能是抽象方法 默认修饰符: publicabstract 示例 输出:我是一个抽烟的人 示例2(接口与多态相配合,实现程序设计和程序运行相分离) 输出:开着飞机去邮信 (4)类与类 ,类与接口 ,接口与接口间的关系 A:类与类 继承关系,只能单继承,可以多层继承 B:类与接口 实现关系,可以单实现,也可以多实现。 还可以在继...
- 下一篇
maven-代码风格检查工具
[TOC] checkstyle checkstyle 用于对代码风格进行检查checkstyle-maven插件操作示例 mvn clean compile checkstyle:checkstyle 输出(target/site/checkstyle.html) Summary Files Info Warnings Errors 24 0 15 0 Files File I W E org/foo/base/mongoop/core/CommandAnalysisListener.java 0 2 0 org/foo/base/mongoop/core/op/CommandOp.java 0 8 0 org/foo/base/mongoop/report/OpResult.java 0 4 0 org/foo/base/mongoop/support/HttpApiClient.java 0 1 0 根据结果页面的提示,可对checkstyle异常进行修复。 如果希望对checkstyle进行定制,可通过配置文件定制规则。 如下命令: mvn clean compile chec...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境