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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏转载gongluck的CSDN博客

野指针分析

1. 野指针的概念   所谓的野指针,就是说指针指向的那块内存,你没有合法操作的权限,也就是指针指向非法的内存空间,这样的指针就叫做野指针。 2. 野指针产...

3857
来自专栏Python小屋

Python常用运算符含义与用法演示

+运算符除了用于算术加法,还可以用于列表、元组和字符串的合并或连接,生成新对象: >>> 3 + (3+4j) #整数和复数相加 (6+4...

2664
来自专栏锦小年的博客

python学习笔记7.3-内建模块collections

Python的内建模块collections为我们提供了一系列的优化操作,本质上就是元组、字典、集合、列表的特殊功能版。 1. namedtuple name...

2195
来自专栏锦小年的博客

Python学习笔记3.2-python内置函数大全

学习python不可避免的首先要了解python的内置函数,熟悉了这些以后可以给编程带来很大的方便。 1、数学运算类 函数名 函数功能 备注 abs...

2539
来自专栏xx_Cc的学习总结专栏

OC-基础总结(一)

38811
来自专栏前端知识分享

第38天:运算符、字符串对象常用方法

console.log(0||1);   1 console.log(1||0);   1 console.log(1||5);   1 console.log...

932
来自专栏苦逼的码农

聊一聊让我蒙蔽一晚上的各种常量池

在写之前我们先来看几个问题,假如你对这些问题已经很懂了的话,那大可不用看这篇文章,如果不大懂的话,那么可以看看我的想法。

974
来自专栏Laoqi's Linux运维专列

文件类型+变量+数值字符串

2006
来自专栏java初学

final和static关键字

35911
来自专栏运维技术迷

连仕彤博客[Python笔记] locals() 函数

1523

扫码关注云+社区

领取腾讯云代金券