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的构造函数,内部实现了转换,这个逻辑,用静态初始化块和直接初始化(无参数)都是实现不了的。

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

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

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大