Java类中的无参构造函数的作用

参考文献:
https://www.jianshu.com/p/cf5ad29676da
https://blog.csdn.net/jdkorg/article/details/100405149

一、背景:
在学习安卓布局里的gridview时,才注意到源码里定义一个java类时会先构造一个无参的函数,一开始不是很理解为什么要多此一举,注释掉无参函数仍然可以编译运行;查了相关文档博客却说如果没定义无参函数会编译报错,因为无法回溯到object类...所以来梳理一下相关知识,也帮助自己理解

二、重要概念
在实例对象的时候,会不断的向上(父类)回溯,一直回溯到Object(),要想顺利的回溯到Object,就必须给指定一条通路,如果没有,就用默认的 super()。而通常情况下,这条直接回溯到Obkect()的通路就是无参构造函数。

三、编译会报错的场景:
当没有在子类里加super(),也没有在父类里构造无参函数

分析:编译器看到我们在父类里写了有参构造法方法,它就会认为,我们不想让子类在回溯的时候走默认的无参构造方法这条路【super(); 此路不通】,但是我们又没告诉给子类,它应该走哪条路(你给了有参就是告诉我不要走无参,但也没告诉我走有参,那走哪?),所以会报错。 所以,若父类没有提供无参构造方法,但是提供了有参构造方法,就要在子类的无参构造方法里,显示的加上调用父类的有参构造方法语句。 如:super(1);(这里就告诉了去走有参了)

四、为什么注释掉无参函数也还可以运行?
根据上述分析,可以明白,这种情况是当子类继承以后直接调用了有参函数,那就可以编译通过,但并不代表无参函数没有作用,可以理解为保障子类继承时可以回溯到object的一种机制。

五、总结:
1.无参构造运行是需要往上一级一级找无参,甚至找到object
2.如果其中一级只有有参,没有无参,会发生错误。但只有无参,没有有参一定不会出错。
3.在以后的Java开发中,若一个类要有带参构造方法,要记得先写无参构造方法。防止类追溯时找不到上级,报错。

全部评论

相关推荐

10-19 10:28
已编辑
成都理工大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9 投递9.10 一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11 二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14 一面(无八股,主动说确实很强,意愿很强)10.16 oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务