java面向对象构造器--学习笔记

什麽是构造器?

构造器就是一种特殊的方法,特殊在:

  • 方法名 == 类名
  • 不能写返回值类

只要声明了这么一个特殊的方法,那么这个方法就不叫方法,叫做构造器了


构造器有什么特点?

  • 创建对象时,对象会去调用构造器
    Student s = new Student();
     执行上面这个语句时会做两个动作,new Student代表在堆区创建一个对象,()其实也代表一个动作,代表告诉前面创建的对象去调用哪个构造器(构造器也分多种,由重载区分,不理解重载可以看这个java方法重载--学习笔记-CSDN博客)执行
    举个栗子:
    这是一个学生类,它长这样:
    public class Student {
        String name;
        double score;
    
    
        //无参构造器
        public Student(){
            System.out.println("无参构造器执行");
        }
    
        //有参构造器
        public Student(String name, double score){
            System.out.println("有参构造器执行");
        }
    }
     

    然后new一个新对象:
     

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


    可以看到,在创建对象时,确实会根据小括号决定执行哪个构造器,由于小括号里面并没有填实参,所以调用了无参构造器
    假如我们在小括号里面输入一些参数,再看结果:

    public class Test {
        public static void main(String[] args) {
            Student s = new Student("泽予",666);
        }
    }


    可以看到,确实是根据小括号里面的实参来决定选择哪个构造器


构造器的应用场景:

  • 创建对象时,同时完对象成员变量的初始化赋值,说白了就是创建对象时把对象要处理的成员变量给它 

不使用构造器初始化情况:

        Student s = new Student();
        s.name = "泽予";
        s.score = 666;

可以看到是比较繁琐的,只是俩个还好,假如同时给几十上百个成员变量赋初值,难道每个都单独写出来吗?那太麻烦了

再看看使用构造器的情况,先完善一下构造器:

    //有参构造器
    public Student(String name, double score){
        this.name = name;
        this.score = score;
        System.out.println("有参构造器执行");
    }

不理解this的可以看这篇:https://blog.csdn.net/m0_71386740/article/details/135257881?spm=1001.2014.3001.5502

然后new一个对象的同时使用构造器赋初值:

Student s = new Student("泽予",666);

可以看到,同样的效果,以前用了三行,现在只需要一句语句就可以完成,非常清爽,优雅


构造器的注意事项:

  • 设计类时,如果不写构造器,java类会自动生成一个无参构造器
    设计一个Teacher类:
    public class Teacher {
        
    }

    可以看到,里面什麽都没有,然后我们再调用无参构造器:


    可以看到,这么做是没有任何问题的,我们知道,在new一个对象时小括号不填参数其实会自动调用无参构造器,但是类中并没有写无参构造器,说明在没有写无参构造器时系统确实会帮我们自动创建一个无参构造器

  • 一旦定义了有参构造器,系统就不会帮我们自动生成无参构造器了
    在Teacher中写一个有参构造器:

    可以看到已经开始报错了,我们再看看无参构造器调用语句

    这句话意思就是Teacher类中只有一个带String的有参构造器,你不能去调用无参构造器,所以说,在我们只写了有参构造器的情况下,去调用无参构造器是会报错的,这个时候最好是自己顺手写一个无参构造器

  • 33
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A泽予

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

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

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

打赏作者

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

抵扣说明:

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

余额充值