java的this的三种用法

本文详细解析了Java中this关键字的用途,包括区分成员变量与局部变量、代表当前对象及构造器间的调用等核心概念,并通过具体示例加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.区分成员变量和局部变量

public class ThisDemo {
        public static void main(String[] args) {
            Student s=new Student("小明明",20);
            System.out.println(s);
        }
    }
    class Student{
        String name;
        int age;
        public Student(String name, int age) {
            //注:没有加this
            name = name;
            age = age;
        }
        @Override
        public String toString() {
            return "Student [ name=" + name + ", age=" + age +"]";
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

打印结果:Student [ name=null, age=0]
赋值没有成功,说明:name(局部变量)=name(局部变量);
而不是name(成员变量)=name(局部变量);

public Student(String name, int age) {
        //注:可以使用this进行区分成员变量和局部变量
        this.name = name;
        this.age = age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

打印结果:Student [ name=小明明, age=20]
这样子就可以赋值成功啦
  • 1
  • 2
  • 3

2.代表当前对象

public static void main(String[] args) {
            Student s=new Student("小明明",20);
            System.out.println(s);
    }
    //为什么加入this后就可以区分呢?
    因为this当前代表的是s实例(对象)相当于
    s.name="小明明";
    s.age="20";
    //再可以理解如下
    this.name=实例(对象).name="小明明"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.构造器与构造器之间的调用

为Student再添加两个构造器,修改后如下:
  • 1
  • 2

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

        public Student(int id,String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }


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

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

        @Override
        public String toString() {
            return "Student [ id=" + id + ", name=" + name + ", age=" + age +"]";
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

//构造器用法-->this();跟函数一样()中可以写参数
构造器调用一般是这样子用的.不同的构造器中存在相同代码.为了复用性。可以在参数少的构造器中调用参数多的构造器,如下:
  • 1
  • 2
  • 3

class Student{
        String name;
        int age;
        int id;
        public Student(String name, int age, int id) {
            this.name = name;
            this.age = age;
            this.id = id;
            System.out.println("构造器3已调用");
        }
        public Student(String name, int age) {
            this(name,age,0);
            System.out.println("构造器2已调用");
        }

        public Student(String name) {
            this(name,0);//参数不足,就使用参数默认值补全
            System.out.println("构造器1已调用");
        }
        @Override
        public String toString() {
            return "Student [ id=" + id + ", name=" + name + ", age=" + age +"]";
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

测试结果1:
    public static void main(String[] args) {
        Student s=new Student("小明明");
        System.out.println(s);
    }   

    构造器3已调用
    构造器2已调用
    构造器1已调用
    Student [ id=0, name=小明明, age=0]

测试结果2:
    public static void main(String[] args) {
        Student s=new Student("小明明",20);
        System.out.println(s);
    }
    构造器3已调用
    构造器2已调用
    Student [ id=0, name=小明明, age=20]

总结:这样子可以在参数最多的构造器中编写代表。其他构造器负责调用参数最多的那个构造器就好了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值