java - 构造方法和this引用

1.构造方法

1.1 构造方法的概念

构造方法是一种特殊的成员方法,它可以使得创建对象和为对象的成员变量赋值同时实现

我们new一个对象的时候,都是new + 类名 +(),这个()可不是摆设,它代表了不带参数的构造方法,那带参数的构造方法怎么写呢

来看看如下代码

class Student {
        int age;
        String name;
        Student(String n, int a) {
            name = n;
            age = a;
        }
}
public class Main {
    public static void main(String[] args) {
        Student a = new Student("张三",18);
    }
}

 

这个便是构造方法,我们在主函数传过去的实参要与构造方法中设置的形参相对应,实参由构造方法中的形参接收,并且在方法体中进行相应操作

1.2 构造方法的特性

1.构造方法的方法名必须与类名相同

2.构造方法没有类型,即什么类型都不要加

3.构造方法由编译器自动调用,生命周期只有一次

4.如果我们没有显示定义一个构造方法,编译器会自动为我们提供一个不带参数的构造方法,如果显示定义了一个构造方法,那么编译器就不会为我们提供一个不带参数的构造方法

为什么要强调这个特性呢,让我们来看下图

 我有一个学生b,我还不知道他的年龄和姓名,于是我想之后再给他赋值,但是此时编译器报错了,这就是因为我们已经显式定义了一个带参数的构造方法,编译器就不提供不带参数的构造方法了,所以编译器就报错

5.构造方法可以重载,一个类中可以有多个构造方法,而且构造方法中可以用this调用其他构造方法,下面展示这种特性解决4中的问题

    class Student {
        int age;
        String name;
        Student(String n, int a) {
            name = n;
            age = a;
        }
        Student() {
            this("未知",-1);
        }
}
public class Main {
    public static void main(String[] args) {
        Student a = new Student("张三",18);
        Student b = new Student();
    }
}

学生b不是不知道姓名年龄嘛,我就显式定义一个不带参数的构造方法,在这个构造方法中我用this调用带参数的构造方法,并且传入,未知和-1,以此代表该学生的姓名年龄未知,这样就解决了不知道姓名年龄的问题,不过要注意在构造方法中用this调用另一种构造方法一定要将this放在第一位,还有有多种构造方法的话,就根据你想调用的构造方法传入对应的实参就好

还有一点要注意,两个构造方法不能互相调用对方,这样会陷入死循环

2.this引用

我们先来看一个场景

class Student {
        int age;
        String name;
        Student(String name, int age) {
            name = name;
            age = age;
        }
}
public class Main {
    public static void main(String[] args) {
        Student a = new Student("张三",18);
        System.out.println(a.name);
        System.out.println(a.age);
    }
}

我想创建一个学生a,名叫张三,18岁,并且我想输出学生a的姓名和年龄,让我们看下运行结果

纳尼,怎么会这样,我不是在构造器中,为我的学生a的姓名和年龄都赋值了吗,怎么会输出null和0呢

我们知道null和0是String和int型的成员变量未被赋初值的时候编译器给予它们的默认值,这意味着我的赋值操作失败了

为什么会这样呢,让我们分析下我们的代码

诶,我们发现成员变量和形参的名字重复了,这是问题的所在吗

我可以明确的告诉你是的

java编译器遵循就近原则,这意味着当名字相同时,它会调用最近的那个变量,这意味着我们的写法是形参给形参赋值,跟我们的成员变量没有半毛钱关系

而this引用就是为了解决这个问题而来的

它的作用是在当前对象的成员方法中调用对象的成员变量

让我们来修改上文的代码

 再次输出姓名和年龄

perfect,我们成功的输出了a的姓名和年龄,更重要的是我们了解this的作用,它可以在对象的成员方法中调用成员方法

接下来有几点关于this的tips

1.this的类型:哪个对象调用的就是哪个对象的引用类型,如上文对象a调用的this就是对象a的引用类型

2.this只能在成员方法中使用

3.在成员方法中,this只能引用当前对象​
 

如果觉得这篇文章对你有用的话,就请点个赞吧=-=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值