首页 > 编程语言 >Java关键字(五)——this

Java关键字(五)——this

时间:2022-10-23 21:06:42浏览次数:44  
标签:调用 Java name 构造方法 关键字 ThisTest public String

  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 来调用构造方法,只能将这条代码放在构造函数的第一行,这是编译器的规定,如下所示:放在第二行会报错。

  

Java关键字(五)——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() 方法,那么就返回谁的引用。

标签:调用,Java,name,构造方法,关键字,ThisTest,public,String
From: https://blog.51cto.com/u_12749768/5787581

相关文章

  • 项目选java8报错 -- 警告: 源发行版 11 需要目标发行版 11 -- 解决方法
    项目创建时默认是JDK11,选JDK8作为SDK,运行时报错,提示“警告:源发行版11需要目标发行版11”,解决方法:点击菜单File-->Settings-->Build,...-->Compiler-->Jav......
  • 【Java复健指南07】OOP中级02-重写与多态思想
    前情提要:https://www.cnblogs.com/DAYceng/category/2227185.html重写注意事项和使用细节方法重写也叫方法覆法,需要满足下面的条件1.子类的方法的参数,方法名称,要和父......
  • java.lang.ClassNotFoundException: org.apache.ibatis.io.Resources
    不知道为什么会出现mybatis包无法加载的问题解决方案:File->ProjectStructure  然后Apply->OK就不会出现刚刚的错误了......
  • Javassist
    前言动态编程这个概念是相对于静态编程而言的,两者的区别简而言之,在静态编程中,类型检查是在编译时完成的,而动态编程中类型检查是在运行时完成的。所谓动态编程就是绕过编译......
  • java_day17~18
    Java基础JavaIO流什么是流?​ 内存与存储设备之间传输数据的通道流的分类按方向分类输入流:将设备中的内容读入到内存中输出流:将内存中的内容写入到设备中按单......
  • Java生成验证码图片
    生成验证码/***验证码工具类**@name:VerificationCode*@author:terwer*@date:2022-07-1722:21**/publicclassVerificationCode{privatesta......
  • javadoc 文档
    javadoc帮助文档书写publicclassJavaDoc{ /** *@authorxiaowen *@paramargs *@since1.0 *@throwsnull */publicstaticvoidmain(String[]args){ S......
  • JavaScript语法-算数、比较运算符、逻辑运算符
    JavaScript语法-算数运算符<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>算符运算符</title><script><!--变量3-->......
  • Java 后端有哪些不用学的技术?
    Java经历了长时间的技术变迁,包括:JavaEE框架,从百家混战到现在Spring基本一统天下。Web开发,从标配的SSH到现在SpirngMVC+MyBatis组合。IDE,从当年如火如荼的JBuil......
  • java程序设计(part 1)
    java语言与面向程序设计java程序介绍java三大平台:javaSE/javaEE/javaMEjava运行机制:java虚拟机代码安全性检测垃圾收集机制java编译过程:源程序(.java)——>javac编译——>......