JavaSE中 this关键字的3种用法,你都知道吗?

前言

       本篇博客 浅浅来总结了在JavaSE中的this关键字的3种用法,并通过代码示例,希望让每一位铁汁们都把这个知识点弄懂弄透。


先浅浅的总结一下,再详细的介绍:

  1. this.data      —>      访问类中的属性(成员变量);
  2. this.func()    —>     访问类中的方法(成员方法);
  3. this()            —>      调用本类中的其他构造方法。


一、访问类中的属性(成员变量)

       为了防止方法的形参名 与 成员变量名相同,而使得方法内部的变量 与形参变量一样,因此我们会引用this关键字 来防止这一错误的发生:

错误代码示例:

public class Date {

        public int year;
        public int month;
        public int day;


        /* 设置日期的方法 */
        public void setDate(int year,int month,int day){
            year = year;
            month = month;
            day = day;
        }

        /* 打印日期的方法 */
        public void printDate(){
            System.out.println("年:"+year+" 月:"+month+" 日:"+day);
        }

        public static void main(String[] args) {
            Date date = new Date();
            date.setDate(2022,3,30);
            date.printDate();
        }
}

 错误代码示例结果:

 正确代码示例 (修改了设置日期的方法):

public class Date {

        public int year;
        public int month;
        public int day;
        

        /* 设置日期的方法 */
        public void setDate(int year,int month,int day){
            this.year = year;
            this.month = month;
            this.day = day;
        }
        
        /* 打印日期的方法 */
        public void printDate(){
            System.out.println("年:"+year+" 月:"+month+" 日:"+day);
        }

        public static void main(String[] args) {
            Date date = new Date();
            date.setDate(2022,3,30);
            date.printDate();
        }
}

正确代码示例结果:

 

二、访问类中的方法(成员方法)

简单的来说,就是可以通过this关键字来调用 已经定义好的方法:

public class Person {
    public String name;
    public int age;

    public void eat(){
        System.out.println("正在吃饭");
    }

    public void sleep(){
        System.out.println("正在睡觉");
        this.eat();
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.sleep();
    }
}

上面示例结果:


三、调用本类中的其他构造方法

先简单了解一下构造方法:

public class Student {
    public String name;
    public int age;

    public void show(){
        System.out.println("姓名"+name+"年龄"+age);
    }

    public Student(){
        System.out.println("这是一个不带参数的构造方法");
    }

    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("这是一个带2个参数的构造方法");
    }


    public static void main(String[] args) {
        Student student = new Student("张三",19);
        student.show();
    }
}

执行流程:

第一步:局部变量student在栈上,指向了在堆上分配的内存(有name和age)的地址;

第二步:调用了合适的构造方法,把“张三”给了name,把“19”给了age。

所以,如果此时来调用show()方法,那么会打印出来:

 

接下来是正题:this()调用本类中其他的构造方法:

第一步:如下列代码,它会首先调用无参的构造方法:

public class Student {
    public String name;
    public int age;

    public void show(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }

    public Student(){
        System.out.println("这是一个不带参数的构造方法");
    }

    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("这是一个带2个参数的构造方法");
    }


    public static void main(String[] args) {
        Student student = new Student();
    }
}

 

第二步:向无参构造方法里面 加入this()关键字,以 调用本类中带有两个参数的构造方法(第一个参数的类型是String,第二个参数的类型是int):

必须要把this()放在第一行,否则会报错的:

public class Student {
    public String name;
    public int age;

    public void show(){
        System.out.println("姓名:"+name+" 年龄:"+age);
    }

    public Student(){
        this("张三",19);
        System.out.println("这是一个不带参数的构造方法");
    }

    public Student(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("这是一个带2个参数的构造方法");
    }


    public static void main(String[] args) {
        Student student = new Student();
    }
}

根据打印的顺序可以发现,new了一个学生对象以后,首先会调用无参的构造方法,

根据执行的先后顺序,先把this()执行完以后,才会执行 打印“这是一个不带参数的构造方法”的语句,

通过this()关键字 调用了有参构造方法,先赋值,再打印“这是一个带2个参数的构造方法”,才算把这一有参构造方法结束;

所以才会 先打印 “这是一个带2个参数的构造方法”,再打印“这是一个不带参数的构造方法”。


总结

this关键字的用法有三个:

  1. this.data      —>      访问类中的属性(成员变量);
  2. this.func()    —>     访问类中的方法(成员方法);
  3. this()            —>      调用本类中的其他构造方法。

如果想知道关于this关键字的使用的更多注意点,请移步至:

【JavaSE系列】第七话 —— 类和对象(1)(内含this关键字更多注意点内容)

如果感觉这篇博客对你们有帮助的话,可以送一个免费的  或者是一波小小的 关注 嘛!

猜你喜欢

转载自blog.csdn.net/qq_53362595/article/details/123851198