Java关键字之this用法详解

yizhihongxing

Java关键字之this用法详解

1. 简介

this 是 Java 语言中的一个关键字,表示当前对象,一般情况下指代的是当前实例。在 Java 中大量使用 this 引用。 this 可以用来调用一个类的构造函数,也可以用来调用类成员变量或成员方法。

2. this 用法

2.1. 用于调用类的构造函数

在 Java 中, this 可以用于引用一个类的构造函数。这种用法的主要目的是在构造函数中调用另一个构造函数。

例如,我们定义一个 Student 类,有两个构造函数,一个包含一个参数,另一个包含两个参数。当在实例化这个类的时候,如果传入了两个参数,则调用两个参数的构造函数,否则调用一个参数的构造函数。

public class Student {
    private String name;

    public Student() {
        this("default");
    }

    public Student(String name) {
        this.name = name;
    }
}

在上面的例子中,我们为 Student 类定义了两个构造函数,一个不带参数,另一个带有一个参数。当在实例化 Student 类时不传入参数,则会调用不带参数的构造函数,该构造函数中又会调用带有一个参数的构造函数来完成初始化操作。

2.2. 用于避免命名冲突

Java 中,如果在方法或构造函数中存在类成员变量和局部变量同名的情况下,使用 this 可以区分成员变量和局部变量。

例如,我们定义一个 Person 类,类中有一个成员变量 name,同时在类的构造函数中又定义了一个局部变量 name

public class Person {
    private String name;

    public Person(String name) {
        this.name = name; //成员变量
        String name = "Tom"; //局部变量
        System.out.println("局部变量 name 值为:" + name);
        System.out.println("成员变量 name 值为:" + this.name);
    }
}

在上面的例子中,通过 this.name 可以访问类的成员变量 name,通过 name 可以访问局部变量 name。在这里,通过 this 关键字区分了成员变量和局部变量的名字冲突。

3. 示例

3.1 示例一

我们定义一个 Person 类,并且在其中定义了两个方法,分别为 setNameshowName

public class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void showName() {
        System.out.println("我的名字是:" + this.name);
    }
}

在上面的例子中,我们在 setName 方法中使用了 this 关键字来访问类的成员变量 name,并且在 showName 方法中也使用了 this 关键字访问类的成员变量 name,从而避免了命名冲突的问题。

public static void main(String[] args) {
    Person p = new Person();
    p.setName("小明");
    p.showName(); //我的名字是:小明
}

当调用 showName 方法时,会输出 我的名字是:小明

3.2 示例二

我们再来定义一个 Family 类,并且在其中调用了 Person 类的构造函数,同时使用了 this 关键字来代表当前实例。

public class Family {
    private Person father;
    private Person mother;

    public Family() {
        this.father = new Person("父亲");
        this.mother = new Person("母亲");
    }

    public void showFamily() {
        System.out.println("我们的家庭成员有:");
        this.father.showName();
        this.mother.showName();
    }
}

在上面的例子中,我们在 Family 类的构造函数中实例化了 fathermother 两个实例,并且在 showFamily 方法中使用了 this 关键字来访问 fathermother 实例。

public static void main(String[] args) {
    Family f = new Family();
    f.showFamily(); 
    //我们的家庭成员有:
    //我的名字是:父亲
    //我的名字是:母亲
}

当调用 showFamily 方法时,会输出 我们的家庭成员有:我的名字是:父亲 我的名字是:母亲

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java关键字之this用法详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaScript探测CSS动画是否已经完成的方法

    前置知识: 在 JavaScript 中,我们可以使用 addEventListener() 方法给元素添加事件监听器,使用 animationstart、animationiteration 和 animationend 事件来侦测 CSS 动画的开始、循环和结束。 方法一:监听 animationend 事件 当 CSS 动画结束时,会触发元素的 ani…

    JavaScript 2023年6月10日
    00
  • 基于jQuery的一个扩展form序列化到json对象

    下面是基于jQuery的一个扩展form序列化到json对象的完整攻略: 什么是jQuery的form序列化? jQuery的form序列化主要是将HTML表单中的数据(包括input、textarea、select等表单元素)封装成一个字符串,以便可以轻松地提交给服务器进行处理。 为什么需要扩展form序列化为json对象? jQuery的form序列化默…

    JavaScript 2023年5月27日
    00
  • 微信小程序 animation API详解及实例代码

    关于“微信小程序 animation API详解及实例代码”的完整攻略,我将从以下几个方面进行详细讲解: 介绍animation API的基本用法 animation API中常用的函数与属性 对animation API进行示例练习,包括动画样式的切换以及动画的时序控制 实例代码演示 1. animation API的基本用法 animation可以实现在…

    JavaScript 2023年6月11日
    00
  • 使用bootstrap validator的remote验证代码经验分享(推荐)

    这里是使用Bootstrap Validator的Remote验证代码经验分享攻略。 什么是Remote验证 Bootstrap Validator提供了Remote验证来检查输入是否已经存在于数据库中,而不是使用静态的规则来验证。 在其最基本的形式中,Remote验证使用AJAX请求来检查输入是否已经存在于数据库中,并根据结果来反馈验证的状态。 开始使用R…

    JavaScript 2023年6月10日
    00
  • 如何让每个Http请求都自动带上token

    要让每个HTTP请求都自动携带token,我们可以使用拦截器来实现。拦截器是一个可以在请求和响应之间进行干预的组件,我们可以在它的回调方法中加入我们需要的逻辑,比如带上token。下面是一个完整的攻略: 步骤一:添加拦截器 首先,我们要添加一个拦截器,代码如下: public class TokenInterceptor implements Interce…

    JavaScript 2023年6月11日
    00
  • 详解前端路由实现与react-router使用姿势

    前端路由是指通过修改浏览器的URL地址,来实现页面内容的变化,而不是像传统的后端路由那样通过访问不同的URL地址展现不同的页面。 如何实现前端路由 在实现前端路由过程中,需要使用到 HTML5 History API。下面是具体的实现步骤: 在 HTML 文件中添加一个 <div> 元素,该元素将用于渲染路由组件。 <div id=&quo…

    JavaScript 2023年6月11日
    00
  • js获取对象,数组所有属性键值(key)和对应值(value)的方法示例

    针对文中提到的“js获取对象,数组所有属性键值(key)和对应值(value)的方法示例”,可以有多种不同的实现方法。以下是其中两条示例说明: 示例一 步骤一:简单的for循环获取对象属性键值 可以通过一个简单的for循环来遍历对象的属性,获取每个属性的键值对。具体步骤如下: let obj = {name: "xiaoming", ag…

    JavaScript 2023年5月27日
    00
  • 在javascript中随机数 math random如何生成指定范围数值的随机数

    首先需要了解 Math.random() 方法可以生成一个在0(包含0)到1(不包括1)之间的一个伪随机数。要生成指定范围内的随机数,需要通过一些计算和转换来实现。以下是一些可能的做法: 做法一:生成任意两数之间的随机数 可以先生成一个在0到1之间的随机小数,然后将其乘以两个数的范围,再加上较小的数,从而实现生成任意两数之间的随机数。 function ra…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部