关于java构造方法的几个注意点

工作久了,很多基础性的知识也就忘了,Object-C如此,java也是。

关于java构造方法的几个注意点如下:

1.构造方法不能被继承 , 不多做解释,试试便知

2.如果自己实现了构造方法,JVM将不会为你默认添加无参构造方法

经反编译得知,程序编译时,会默认添加一个无参构造器。但是如果父类自己实现了重载的构造方法,那么将不会默认创建无参构造器。

故子类构造方法会报错,因为子类构造器中默认第一行会被默认添加super()调用父类构造方法,而此时父类已经没了无参构造方法。

所以如果父类没有无参构造方法,子类构造方法只能调用父类自己实现的构造方法了,如下图子类构造方法可以自己调用super("实参名");

3.最重要的一点,构造方法真的是用于初始化对象的吗?

我们修改一下第2点中的代码,初始化一个对象Student,Student类继承自Person类

Student stu = new Student();

事实上,Student实例在调用构造方法之前,就已经初始化了。理由如下:

a)下图this在构造方法的super()时已经存在值,而此时子类成员变量stuNum和父类成员变量name都为默认值0和null。

b)子类构造方法执行完super()后,子类成员变量stuNum和继承父类的name成员变量都有了值。

故,对象在堆中开辟内存初始化,在构造方法之前就已完成,构造方法中的super()作用在于给父类的私有成员变量进行显示初始化,包括构造代码块的内容,这也是为什么自己写super()必须得放在第一行,我们的指定赋值必须在super()之后,否则就报错的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值