starrynightXK 2020-02-21 11:41 采纳率: 100%
浏览 522
已采纳

求解:java构造方法里面是空的时候,初始化对象过程是怎么样的?

java构造方法里面是空的时候,为什么能初始化对象?
空的时候是不是就是表面上我们看着是空的,实际上执行了类的语句?
如果执行了类的语句,执行了哪些类的语句?
为什么没有任何教程,没有讲解到没有内容时候的执行逻辑。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-02-21 11:44
    关注

    构造函数为空,在此之前还可能执行的包括(按照执行顺序)
    基类的构造函数
    本类的静态构造函数
    初始化字段语句,比如 private int count = 1;
    初始化块,比如写在类里面的 { } 的内容

    很多书都有介绍,你说没有教程应该是你读书少的缘故。


    构造函数除了初始化对象,还可以增加别的逻辑
    比如

    class MyDate
    {
    public int year = 1900;
    public int month = 1;
    public int day = 1;
    private MyDate() { }
    public MyDate(int y, int m, int d)
    {
    year = y;
    month = m;
    day = d;
    }
    public MyDate(String datestr)
    {
    String arr = datestr.split("-");
    year = Integer.parseInt(arr[0]);
    month = Integer.parseInt(arr[1]);
    day = Integer.parseInt(arr[2]);
    }
    }
    
    

    这里每个构造函数都不能省略,初始化语句也不能省。
    虽然无参数构造函数没有代码,但是它封闭了构造函数,使得不能直接创建。
    String的构造函数,内部实现了转换,这个逻辑,用静态初始化块和直接初始化(无参数)都是实现不了的。

    只有一种特例,构造函数和直接初始化成员可以互换,那就是成员的初始值是不依赖任何参数的,是固定的,并且构造函数只是给这些成员初始值,不需要参数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader
  • ¥45 谷歌浏览器出现开发者工具无法显示已创建的,但您可以调试已部署的代码。 状态代码 404, net::ERR HTTP RESPONSE CODE FAILURE
  • ¥15 chatgpt网页版侧边栏和模型切换点击没反应怎么办
  • ¥15 如何解决蓝牙通话音频突发失真问题
  • ¥15 安装opengauss数据库报错
  • ¥15 【急】在线问答CNC雕刻机的电子电路与编程
  • ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
  • ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
  • ¥15 Python pandas