博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于java构造方法的几个注意点
阅读量:2440 次
发布时间:2019-05-10

本文共 693 字,大约阅读时间需要 2 分钟。

工作久了,很多基础性的知识也就忘了,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()之后,否则就报错的原因。

转载地址:http://dkdqb.baihongyu.com/

你可能感兴趣的文章
bat命令行遍历文件_命令行基础知识:如何遍历目录中的文件
查看>>
了解编程中的操作顺序
查看>>
react中创建一个组件_如何在React中创建社交关注组件
查看>>
DigitalOcean的技术写作指南
查看>>
配置管理规范 配置管理计划_配置管理简介
查看>>
如何在Ubuntu 18.04上添加和删除用户
查看>>
angular4前后端分离_如何在Angular 4+中使用Apollo客户端GraphQL
查看>>
如何在Ubuntu 18.04上安装Apache Kafka
查看>>
如何在Ubuntu 20.04上安装R [快速入门]
查看>>
debian tomcat_如何在Debian 10上安装Apache Tomcat 9
查看>>
如何使用MongoDB和Docker设置Flask
查看>>
如何为Python 3设置Jupyter Notebook
查看>>
docker 容器共享数据_如何在Docker容器之间共享数据
查看>>
express中间件_创建自己的Express.js中间件
查看>>
使用Docker Compose处理多个容器
查看>>
使用Node.js电子书从容器到Kubernetes
查看>>
帝国cms接入小程序_使用无头CMS将'A'放入JAMStack
查看>>
spring react_如何使用React Spring创建动画的React应用
查看>>
go strings包_Go中的Strings包简介
查看>>
盖茨比乔布斯_在盖茨比中使用样式化组件
查看>>