java为什么不设计成无论是否提供有参构造方法,都默认有隐藏的无参构造方法?
ringa_lee
ringa_lee 2017-04-18 09:27:38
[Java讨论组]

而要设计成一旦提供了有参构造方法,就没有了隐式的无参构造方法。无论什么情况下都有无参构造器岂不是更方便?

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
怪我咯
  1. 构造函数的作用——初始化成员变量。

  2. 类作者自己写的构造函数,自然是进行了合理的初始化操作。

  3. 如果默认都加一个无参的构造函数,外部就可能调用该构造函数,进而生成一个不符合作者预期的对象(成员变量未被合理初始化)。


看下面的这个类:

public class Rect {
    private float width;
    private float height;

    public Rect(float width, float height) {
        if (width <= 0 || height <= 0) {
            // 参数不合理时抛出异常
            throw new IllegalArgumentException(
                    String.format("Size must > 0. w: %f, h: %f",
                            width, height));
        }
        this.width = width;
        this.height = height;
    }
}

如果存在默认的不带参数的构造函数,那外界就可以通过new Rect()创建一个违背作者预期的对象。

天蓬老师

首先,每个java类都需要至少有一个构造方法,所以对于代码里没有构造方法的,就自动生成一个无参的
如果程序员定义了构造方法,那么就满足每个java类都要至少有一个构造方法的条件了,java编译器就不浪费时间和空间去生成一个程序中不一定用得到的方法了

迷茫

除了抽象类和接口不能实例化的例外情况,普通java类是有默认无参构造方法的,如果你自定义了有参构造方法,默认的无参构造方法就失效了,必须手动设置无参构造方法,才能有效。

迷茫

定义类的时候如果没有定义任何有参数没参数的构造器,Java以为你忘记了就默认给你定义一个无参数的构造器,一旦出现了你定义的有参数的构造器,Java就把定义构造器的权利交给你了,于是,就没给你定义了默认的无参数的构造器

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号