JAVA(二十)构造方法

构造方法介绍

用于创建对象的方法,我们在前面的章节中对类和对象有了一定初步认识,不知道大家是否还记得使用new创建对象,其语法格式为类名 对象名 = new 类构造方法();何为构造方法?它是一种特殊的类方法成员,用于创建对象时进行初始化。构造方法主要作用包括两方面: 构造一个类的实例对象 对实例对象进行初始化;构造方法是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并且不书写返回值类型,在创建对象实例时由new运算符自动调用。

构造方法又有无参构造器,和有参构造器

无参构造器:初始化对象为默认地址

有参构造器:在初始化对象的时候为对象赋值、

语法规则

方法名与类名相同

声明中没有返回值类型

可以有参数列表

默认构造方法

定义一个不带构造方法的Teacher类:

public class Teacher {
    /*
    * 教师类属性:
    * name - 教师姓名
    * age - 教师年龄
    * salary - 教师工资
    */
    private String name;
    private int age;
    private int salary;

    /*
    * 获取教师名字
    */
    public String getName() {
        return this.name;
    }

    /*
    * 设置教师名字
    */
    public void setName(String name) {
        this.name = name;
    }
}

public class ConstructorDeamon {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        System.out.println("默认构造方法创建教师对象,该老师名字是" + t.getName());

        // 设置老师名字
        t.setName("职场未来浩老师");
        System.out.println("老师名字已经更新,现在老师名字是" + t.getName());
    }
}

结合代码,我们一起看看,Teacher类中是没有显示定义构造方法的,我们前面讲过,使用new构建对象时,Teacher t = new Teacher();,需要构造方法。但是类中没有显示定义,而对象能够创建出来,说明编译器帮我们主动加了一个构造方法,该方法也称为默认构造方法:

public Teacher() {
}

从代码运行结果也能看出这一点,第一行显示为“默认构造方法创建教师对象,该老师名字是null”。大家想想为什么null?因为name的数据类型为String,String的默认值是null;侧面印证了默认构造方法的存在,它没有给对象t中任何属性字段赋值,

因此,每个属性采用的是默认值。如果类使用默认构造方法的话,我们想要改变对象的状态(也就是属性),我们需要额外定义设置方法,例如,Teacher类中定了public void setName(String name)。当我们设置老师对象姓名t.setName("职场未来浩老师");后,再次打印老师名字时,名字是有效的。

另一个例子

public class Student {
    private String name;
    private String age;
    Student(){
     System.out.println(“new 时执行”)
    }
    public static void main(String[] args) {
        Student s =new Student();
        System.out.println(s.name);
    }
}

重载构造方法

重载是指同一个类中定义多个方法名相同但是参数列表不同的方法。构造方法的重载同样遵循方法重载的规则,为什么需要重载构造方法呢?基于以下几方面的原因:

  • 简化代码:有时候,我们需要创建具有不同参数的对象实例,如果每个对象都使用不同的构造方法,会导致代码量很大。通过重载构造方法,我们可以使用相同的构造方法名,但不同的参数列表来创建不同的对象实例,从而简化代码。
  • 参数检验:在创建对象时,我们可能需要检查传递给构造方法的参数是否符合要求。通过重载构造方法,我们可以根据不同的参数列表来检查参数的有效性,从而保证对象的正确性。
  • 灵活性:重载构造方法使得对象的创建更加灵活。我们可以根据需要选择传递给构造方法的参数,从而创建具有不同属性的对象实例。
  • 可读性:重载构造方法使得代码更加清晰易懂。通过查看构造方法的参数列表,我们可以清楚地了解每个构造方法的作用,从而更好地理解对象的创建方式。

重载构造方法核心原因是为了提高代码的可读性和灵活性,简化代码,提高程序的健壮性。
改造一下Teacher类,适配不同Teacher对象的创建,具体代码示例

public class Teacher {
    /*
    * 教师类属性:
    * name - 教师姓名
    * age - 教师年龄
    * salary - 教师工资
    */
    private String name;
    private int age;
    private int salary;

    // 显示定义默认构造方法
    public Teacher() {
    }

    // 只设置教师名字属性的构造方法
    public Teacher(String name) {
        this.name = name;
    }

    // 设置教师名字和年龄属性的构造方法
    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 教师名字、年龄和工资均设置的构造方法
    public Teacher(String name, int age, int salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
}

Teacher类中提供了四种可供选择构造方法,其中,public Teacher()显示定义的默认构造方法。创建Teacher对象时,我们就有了更多的选择。

另一个例子

public class Student {
    private String name;
    private String age;
    private String sex;
    Student(String name,String age){
        this.name=name;
        this.age=age;
    }
    Student(String name,String age,String sex){
        this.name=name;
        this.age=age;
        this.sex =sex;
    }
    public static void main(String[] args) {
        Student s =new Student("张三","10");
        System.out.println(s.name);
        System.out.println(s.age);
        Student s1 =new Student("张三1","22","男");
        System.out.println(s1.name);
        System.out.println(s1.age);
        System.out.println(s1.sex);
    }
}

//练习定义一个Book类,有字符串name,整数price两个属性,

声明一个构造方法name,为name赋值

再声明一个构造方法为name,price 赋值。

并分别创建两个实例,用这两个构造方法。

练习toString()方法

091a2ebe177641a5ba154618abc2d419.png

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值