Java关键字之this用法详解

 更新时间:2023年05月10日 10:32:04   作者:一一哥Sun  
这篇文章将为大家详细介绍一下Java关键字this的用法,文中有相关的代码示例,希望对大家的学习或工作有一定的帮助,感兴趣的同学可以参考下

一. this关键字

1. 简介

我们知道,this是”这个“的意思。在java中表示当前类的对象, 可以理解成指向对象本身的一个指针 。通俗地说就是表示当前类对象”自己“,它是在对象被创建时自动产生的 我们使用this,可以用来调用本类的属性、方法、构造方法。 当我们在构造方法中使用this时,this表示的是当前类的成员变量。

2. 作用

根据上面的简介,我们可以提取出this关键字的几个核心作用:

  • 表示当前类对象;
  • 调用当前类中的属性;
  • 调用当前类的方法或构造方法。

二. 代码案例

接下来分别针对以上几种情况,给大家设计几个案例进行讲解。

1. 代表当前类对象

所谓代表当前类对象,就是指当我们创建一个类对象时,比如Person p=new Person();p就是一个类对象,我们可以通过p.属性p.方法的形式来进行调用。但如果我们是在Person类里面调用Person的属性或方法,其实可以直接使用this来替代当前的对象,即this.属性this.方法。这里的this,就是当前类对象!

另外一个更常用的场景是在接口回调中。比如某个类的构造方法带有一个接口类型的参数,当前类又实现了该接口,当我们在当前类中调用这个构造方法时,就可以直接传递this作为参数。参考下面的Person代码:

/**
 * @author 
 */
public class Person implements Sport {
    // 姓名
    public String name;
    // 年龄
    private int age;

    //定义带有3个参数的构造方法,第3个参数是自定义的Sport接口类型
    public Person(String name, int age, Sport sport) {
	System.out.println("我的名字是:" + name + ",年龄:" + age);
	sport.pingpang();
    }

    @Override
    public void pingpang() {
	System.out.println("我会打乒乓球");
    }

    // 才艺展示
    public void show() {
        //这里的第3个参数,我们就可以直接用this作为参数,代表当前类对象!!!
        Person p = new Person("马龙", 30, this);
    }
}

Sport接口代码参考如下:

/**
 * @author 
 */
public interface Sport {
    //打乒乓球
    void pingpang();
}

在上面的Person类中,我们定义了带有3个参数的构造方法,其中第3个参数是自定义的Sport接口类型。在show()方法中,我们调用Person的构造方法,当传递第3个参数时,就可以直接用this作为参数传递进去。因为Person类实现了Sport接口,所以Person类也就属于Sport类型,符合第3个参数的类型要求。因为this表示当前类对象,所以我们可以直接用this作为参数。

当然,这里涉及到了接口的概念和用法,我们还没有学习到。大家先别急,后面会专门给大家讲解接口,本案例只是先供大家参考。

2. 调用类中的属性

大多数时候,一般的普通方法访问其他方法、成员变量时不必使用this关键字。但如果方法的形参与类中属性的名称相同,我们可以通过“this.属性名”的形式进行区分。

/**
 * @author
 */
public class Student {
    private String name;
    private int age;
    private String sex;

    public Student(String name, String sex, int age) {
	//方法的形参与属性名相同,可以通过“this.属性名”的形式进行区分
	this.name = name;
	this.sex = sex;
	this.age = age;
    }

    public static void main(String[] args) {
	Student stu=new Student("一一哥", "男", 35);
	System.out.println("name="+stu.name+",sex="+stu.sex+",age="+stu.age);
    }
}

在上面的代码中,name、age、sex都是被private修饰的,因此我们不能在类的外部进行直接设置。为了解决这个问题,我们可以给Student类添加一个构造方法,然后在构造方法中传递参数进行修改。我们在 Student类的构造方法中使用this关键字调用name、age 和 sex属性,以此区分方法的形参。这里的this就表示当前对象,this.name=name语句是一个赋值语句。等号左边的this.name是当前对象的成员变量name,等号右边的name表示方法形参接收的数值。

3. 调用类中的方法

this关键字的另一个作用,就是让类中一个方法,访问该类里的另一个方法。

/**
 * @author 一一哥Sun 
 */
public class Computer {
    // 电脑品牌
    private String logo;

    // 播放音频
    public void playSound() {
	System.out.println("播放音频...");
    }

    // 播放视频
    public void playVideo() {
	// 同时播放音频
	this.playSound();
	System.out.println("播放视频...");
    }
    
    public static void main(String[] args) {
        //静态方法中不能使用非静态成员
	//this.playVideo();
	Computer com=new Computer();
	com.playVideo();
    }
}

在上面的代码中,我们在playVideo()方法中调用了playSound()方法,此时就可以通过”this.方法名“的形式进行调用。因为this可以代表任何对象,当this出现在某个方法体中,它所代表的对象是不确定的,但它的类型是确定的,它代表的就是当前类的实例对象。只有当这个方法被调用时,它所代表的对象才被确定下来,谁在调用这个方法,this 就代表谁。

但是我们不能在带有static关键词的方法中通过this.属性名this.方法名来引用,这是因为Java语法有规定,静态成员不能直接访问非静态成员。在后面学习static关键字时,会再给大家详细讲解这一点!

4. 调用类的构造方法

我们也可以使用this关键字,实现对构造方法的调用,此时是通过this()这样的语法格式来实现的。this()括号中可以有参数,如果有参数就是在调用指定的有参构造方法。

/**
 * @author 一一哥Sun 
 */
public class Computer {
    // 电脑品牌
    private String logo;
    // 电脑颜色
    private String color;
    
    //无参构造方法
    public Computer() {
	// this(a,b)调用另一个构造方法
	this(null, null);
    }

    //1个参数的构造方法
    public Computer(String logo) {
	// this(a,b)调用另一个构造方法
	this(logo, null);
    }

    //2个参数的构造方法
    public Computer(String logo, String color) {
	System.out.println("logo=" + logo + ",color=" + color);
    }

    public static void main(String[] args) {
	Computer com=new Computer("苹果");
    }
}

大家注意,this()格式不能在普通方法中使用,只能在构造方法中使用。而且在构造方法中使用时,必须放在第一条语句!

三. 结语

至此,就给大家把this关键字讲解完毕了,现在你知道this的作用了吗?对于我们来说,掌握this的3个核心作用即可:

  • 表示当前类对象;
  • 调用当前类中的属性;
  • 调用当前类的方法或构造方法。

到此这篇关于Java关键字之this用法详解的文章就介绍到这了,更多相关Java关键字this内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Spring由构造方法自动装配

    使用Spring由构造方法自动装配

    这篇文章主要介绍了使用Spring由构造方法自动装配,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入解析Java设计模式编程中观察者模式的运用

    深入解析Java设计模式编程中观察者模式的运用

    这篇文章主要介绍了Java设计模式编程中观察者模式的运用,观察者模式主要是为了将对象进行与被观察者一样的实现,需要的朋友可以参考下
    2016-02-02
  • Java+Selenium实现控制浏览器的启动选项Options

    Java+Selenium实现控制浏览器的启动选项Options

    这篇文章主要为大家详细介绍了如何使用java代码利用selenium控制浏览器的启动选项Options的代码操作,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-01-01
  • SpringMVC处理器映射器HandlerMapping详解

    SpringMVC处理器映射器HandlerMapping详解

    这篇文章主要介绍了SpringMVC处理器映射器HandlerMapping详解,在SpringMVC中会有很多请求,每个请求都需要一个HandlerAdapter处理,具体接收到一个请求之后使用哪个HandlerAdapter进行处理呢,他们的过程是什么,需要的朋友可以参考下
    2023-09-09
  • 快速解决 IDEA 报错: “java 找不到符号“(“cannot find symbol“)

    快速解决 IDEA 报错: “java 找不到符号“(“cannot find symbol“)

    文章详细讲解了在IntelliJIDEA中解决“找不到符号”错误的方法,包括检查导入语句、拼写错误、类路径设置、文件编译状态、JDK配置以及IDE配置问题,通过具体示例代码,展示了如何从错误代码到解决步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • java使用webuploader实现跨域上传详解

    java使用webuploader实现跨域上传详解

    目前初步接触JAVA图片上传,用的webuploader。已经跟后台对接上,但是有个问题就是跨域请求,通过查找相关资料终于实现了,下面这篇文章主要给大家介绍了关于java使用webuploader实现跨域上传的相关资料,需要的朋友可以参考下。
    2017-07-07
  • Spring Boot 中事务的用法示例详解

    Spring Boot 中事务的用法示例详解

    本文详细介绍了Spring Boot中事务管理的使用方法,包括事务的基本概念、配置、传播行为、隔离级别以及回滚机制,通过使用@Transactional注解,可以方便地实现事务的控制,文章还讨论了事务方法的可见性、自我调用问题以及超时设置等注意事项,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot默认最大连接数的实践

    SpringBoot默认最大连接数的实践

    Spring Boot 应用的最大连接数取决于多个因素,包括使用的Web服务器类型、配置以及底层操作系统的限制,下面就来介绍一下不同场景的默认值配置,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • 详解三种java实现多线程的方式

    详解三种java实现多线程的方式

    数据时代的到来,多线程一直都是比较关心的问题之一,这篇文章介绍了JAVA实现多线程的三种方法,有需要的朋友可以参考一下
    2015-08-08
  • Java web开发环境的搭建超完整步骤

    Java web开发环境的搭建超完整步骤

    这篇文章主要介绍了如何安装和配置IDEA 2020.1.1 X64版本软件,包括创建Java Web项目、配置Tomcat、部署Tomcat API以及创建和配置Servlet,通过这些步骤,新手可以快速搭建起Javaweb开发环境,需要的朋友可以参考下
    2024-11-11

最新评论