Java中的构造器的作用?(构造方法的作用与特点)

Java中的构造器的作用是什么?

今天看到一个问题,那就是Java中的构造器的作用是什么,第一反应是:嗯?构造器?不就是构造方法嘛,只是只是叫法不一样,但是习惯喊构造方法的我还是忍不住吐槽了,回归正题,用简单来说构造器的作用就是:

  • 创建对象
  • 初始化成员变量

那么问题来了,构造方法的特点有哪些呢:

  • 首先是构造方法的方法名要与类名一致
  • 构造方法分为:有参构造方法和无参构造方法
  • 构造方法无返回类型,void类型也不可以
  • 构造方法是不能被继承的,但是可以使用super来调用,且super必须声明在在子类构造方法中的首行
  • 默认有一个无参构造方法,当自定义无参构造方法的时候,默认则无效
  • 可以没有构造方法(编译器默认有一个无参构造方法),也可以有多个构造方法,他们之间构成重载关系

一开始学习JavaSE的时候,对于构造方法的概念还十分模糊,也不知道怎么用,在哪儿用,只会盲目的写差不多的getter setter方法模板:

public class ConstructionDemo5 {
    private String name;
    private int number;
    private double score;

    public String getName() {
        return name;
    }

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

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public static void main(String[] args) {
        ConstructionDemo5 constructionDemo5=new ConstructionDemo5();
        constructionDemo5.setName("杜");
        constructionDemo5.setNumber(21);
        constructionDemo5.setScore(97.4);

        System.out.println("我是"+ constructionDemo5.name+",我学号是:"+ constructionDemo5.number+",我这次成绩是:"+ constructionDemo5.score);
    }
}

我是杜,我学号是:21,我这次成绩是:97.4

Process finished with exit code 0

从上面的代码看来,new对象,调用set方法赋值,这看起来似乎没什么问题,但是在需要给更多的成员变量赋值的时候,实例化更多对象的时候,就很容易造成纰漏,上面的方法是会增加我们的工作量,并且冗长的代码也不适宜阅读,那该怎么办呢?

这时候就要用到构造方法了

public class ConstructionDemo6 {
    private String name;
    private int number;
    private double score;

    public ConstructionDemo6(String name, int number, double score) {
        this.name = name;
        this.number = number;
        this.score = score;
    }

    public static void main(String[] args) {
        ConstructionDemo6 construction=new ConstructionDemo6("杜",1,99.9);
        System.out.println("我是"+ construction.name+",我学号是:"+ construction.number+",我这次成绩是:"+ construction.score);
        
    }
}
我是杜,我学号是:1,我这次成绩是:99.9

Process finished with exit code 0

上面的例子中用到了有参构造方法,通过构造方法我们可以避免了忘给某些成员变量赋值的问题。

关于构造方法,一开始我说到分为有参构造方法和无参构造方法,默认有一个无参构造方法,当自定义无参构造方法的时候,默认则无效可以没有构造方法(编译器默认有一个无参构造方法),也可以有多个构造方法,他们之间构成重载关系。

下面我举出相关例子:

package com.JavaSe.Demo;

/**
 * @Description TODO
 * @Author Du
 * @Date 2021/5/28 18:27
 */
public class ConstructionDemo {

//定义类Construction1   自己不手动添加任何无参或有参数构造方法

    static class Construction1{
        private int age;
        private String name;
        private String sex;

    }


//定义类Construction2   自己添加无参的构造方法

    static class Construction2{
        private int age;
        private String name;
        private String sex;

        public Construction2(){
            System.out.println("无参构造方法被调用");
        }
    }


//定义类Construction3   有参数的构造方法

    static class Construction3{
        private int age;
        private String name;
        private String sex;

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

   
    }


//定义类Construction4   自己添加无参的构造方法,和有参数的构造方法

    static class Construction4{
        private int age;
        private String name;
        private String sex;

        //不带参数的构造函数,可以被重载
        public Construction4(){
            System.out.println("无参构造方法被调用");
        }

        //带参数对的构造函数
        public Construction4(String name, String sex, int age ){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        //方法重载
        public  Construction4(String name,double score){
            this.name=name;

        }
    }



    public static void main(String[] args) {
        Construction1 construction1 = new Construction1();//编译通过;①实例化Person对象    ②自动调用构造方法Construction( )

        Construction2 construction2 = new Construction2();//编译通过;打印: 无参构造方法被调用


        // 这样写,编译器会报错,原因是系统默认的无参构造方法被有参构造方法覆盖,编译器不能再提供无参构造方法
        Construction3 construction3 = new Construction3();

        //Person4 Construction4 = new Person4();//编译通过;打印: 无参构造方法被调用

        Construction4 Construction4 = new Construction4("qzz", "man", 18);//编译通过;


    }
}


  • 27
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坐着地板打地鼠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值