全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java构造器使用方法及注意事项

Java构造器使用方法及注意事项

超类的构造器在子类的构造器运行之前运行,也就是说,在创建对象时,先运行超类中的构造器,然后再运行子类中的构造器,此时,如果在执行超类构造器的时候,构造器执行了可覆盖的方法,那么就会去调用子类中的该方法,而此时子类还未被实例化,此时就有可能出问题。

以一个例子说明:

public class Super {
int age = 10;
protected void say() {
System.out.println("super");
}
public Super() {
override();
}
public void override() {
System.out.println("super override");
}
}
class Sub extends Super {
int age = 9;
private final Date date;
public Sub() {
date = new Date();
}
@Override
public void override() {
System.out.println(date);
}
@Override
protected void say() {
System.out.println("sub");
}
public static void main(String[] args) {
Super sub = new Sub();
sub.override();
// sub.say();
// System.out.println(sub.age);
}
}

创建两个类,一个 Super.java,其中定义一个成员变量 age=10,并且在构造器中调用了 override() 方法。Sub.java 继承了 Super.java,并且在构造方法中初始化了 date。

现在我们执行 main 方法,控制台会打印出什么呢? 是一个 date? 还是两个 date? 答案是先打印出 null,然后打印出具体的 date 值。并且如果在 Sub.java 的 override 方法中调用 date 的任意方法时,会出现 NPE

为什么会这样呢?

我们知道在使用 new 来创建对象的时候,会先检查该类是否继承自父类,如果是,则会先调用父类的构造方法,该案例中,在 new Sub() 时,发现 Sub 是 Super 的子类,于是先调用 Super 的构造方法,在 Super 构造方法中,发现调用了 override 方法,于是又去寻找子类 Sub 是否重写了 override 方法,发现该子类重写了,则调用子类的 override,打印出 date,而此时 date 还未被初始化,所以值为 null。

在父类的构造方法执行完毕后,再执行子类的构造方法,此时 date 被初始化了,所以再次调用 override 方法时,则会正确打印出 date。

当调用 sub.age,会打印出什么呢?是 10 还是 9 ?

其实是打印出 10,创建对象的时候,实例变量有两种类型,前面是声明类型,后面是实际类型

Super sub = new Sub();

sub 的声明类型为 Super,实际类型为 Sub。

当调用成员变量的时候,会先在声明类型中寻找该变量,如果该变量存在,则使用声明类型中的变量值,如果不存在,则在实际类型中去寻找该变量。

而调用方法的话,优先在子类中寻找对应方法,如果子类中不存在,再调用父类中方法。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言,本站还有很多java 的文章,欢迎大家搜索参阅!


# Java构造器  # java  # 构造方法详解  # Java基础教程之构造器与方法重载  # 通过实例了解java spring使用构造器注入的原因  # Java私有构造器使用方法示例  # 实例解析Java中的构造器初始化  # Java 构造器原理及用法解析  # java 页面url传值中文乱码的解决方法  # java中文传值乱码问题的解决方法  # javascirpt实现2个iframe之间传值的方法  # java及C++中传值传递、引用传递和指针方式的理解  # Java构造器与传值学习总结  # 子类  # 类中  # 不存在  # 写了  # 什么呢  # 则会  # 未被  # 是一个  # 就有  # 如有  # 希望能  # 而此时  # 发现该  # 然后再  # 欢迎大家  # 中去  # 有两种  # 谢谢大家  # 会去  # 则在 


相关文章: 西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  建站之星代理平台如何选择最佳方案?  如何在IIS中新建站点并解决端口绑定冲突?  宁波自助建站系统如何快速打造专业企业网站?  如何通过.red域名打造高辨识度品牌网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站之星如何保障用户数据免受黑客入侵?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  活动邀请函制作网站有哪些,活动邀请函文案?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何快速搭建高效WAP手机网站吸引移动用户?  外贸公司网站制作哪家好,maersk船公司官网?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Android自定义控件实现温度旋转按钮效果  动图在线制作网站有哪些,滑动动图图集怎么做?  建设网站制作价格,怎样建立自己的公司网站?  如何快速重置建站主机并恢复默认配置?  c++ stringstream用法详解_c++字符串与数字转换利器  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何用AWS免费套餐快速搭建高效网站?  建站之星如何通过成品分离优化网站效率?  如何在阿里云虚拟服务器快速搭建网站?  制作销售网站教学视频,销售网站有哪些?  C#怎么创建控制台应用 C# Console App项目创建方法  建站之星代理如何优化在线客服效率?  5种Android数据存储方式汇总  如何基于云服务器快速搭建网站及云盘系统?  建站主机如何选?性能与价格怎样平衡?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  购物网站制作公司有哪些,哪个购物网站比较好?  如何选择香港主机高效搭建外贸独立站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  名字制作网站免费,所有小说网站的名字?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  实例解析Array和String方法  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在IIS7中新建站点?详细步骤解析  大学网站设计制作软件有哪些,如何将网站制作成自己app?  做企业网站制作流程,企业网站制作基本流程有哪些?  高防服务器租用指南:配置选择与快速部署攻略  制作证书网站有哪些,全国城建培训中心证书查询官网?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  魔方云NAT建站如何实现端口转发?  建站主机无法访问?如何排查域名与服务器问题  制作宣传网站的软件,小红书可以宣传网站吗?  建站与域名管理如何高效结合?  建站DNS解析失败?如何正确配置域名服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。