哈喽,大家好,我是指北君。

介绍完 native、static、final 关键字后,指北君再接再厉,接着为大家介绍另一个常用的关键字——this。

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() 方法,那么就返回谁的引用。

5、小结

  好了,这就是Java中对 this 关键词的介绍,记住一句话 this 代表的就是当前。

  指北君后续的文章会给大家介绍Java中的各种关键字。

  我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

最新文章

  1. 微信小程序:原生热布局终将改变世界
  2. 黑马程序员——【Java基础】——Java概述
  3. Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记
  4. android优化(json工具,message新建/传递,avtivity深入学习视频)
  5. json返回数据拼接HTML
  6. js中表单的聚焦失焦事件
  7. 学习笔记-nodejs报错
  8. Python初识 - day5
  9. B+索引、Hash索引、数据类型长度
  10. uwsgi服务启动(start)停止(stop)重新装载(reload)
  11. 【SpringMVC】<context:include-filter>和<context:exclude-filter>使用时要注意的地方
  12. 配置hadoop-1.2.1 eclipse开发环境
  13. android ui更新
  14. Dubbo高级篇4
  15. Hadoop 目录分析及存储机制
  16. docker-compose部署elk+apm
  17. git 学习小记之记住https方式推送密码
  18. Qt5.3.2(VS2010)_调试_遇到的问题
  19. mac 下 mysql 安装
  20. oracle 收集的一些图

热门文章

  1. PHP如何接收json数据
  2. Redis双写一致性与缓存更新策略
  3. Git,Linux,Ubuntu,Tmux的常用命令
  4. scrapy 错误:Missing scheme in request url: %s' % self._url
  5. LeetCode通关:哈希表六连,这个还真有点简单
  6. tkinter 基础教程
  7. Docker部署Zookeeper部署实践(1)
  8. Matlab 使用filter求解系统响应
  9. pthread_cleanup_push与pthread_cleanup_pop的理解
  10. 解析java源文件