欢迎来到天天文库
浏览记录
ID:53738101
大小:166.48 KB
页数:3页
时间:2020-04-21
《“礼让”原则学习Java对象初始化顺序-论文.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、襄阳职业技术学院学报第13卷第2期doi:13.3969~.issn.2095-6584.2014.02.121双月刊2014年3月“礼让’’原则学习Java对象初始化顺序武瑞婵(湖北文理学院数学与计算机科学学院,湖北襄阳441053)摘要:本文从教学角度对Java对象初始化顺序进行了实证分析,给出了JVM在执行过程中的“礼让”原则,最后还针对继承关系中构造函数的调用规则给出了更为简便和高效的记忆方法。关键字:初始化顺序;“礼让”原则;继承;构造函数中图分类号:TD312.1文献标识码:A文章编号:2095—6584{2014
2、)02—0121—03Java对象初始化顺序【l是一个比较基础的知识dadd=newdad(“l”);点,但在教学过程中发现同学们在学习和使用时总staticdadd1-newdad(“Tom”);是一头雾水。尽管每本教材或参考书上都有非常详publicson0{System.out.print(“son”);)细的介绍,但仍是有很多同学觉得难以理解,甚而publicstaticvoidmain(String[]args){至于有同学说这是一个“悲催”的知识点。事实上,sons=news0n();关于Java对象初始化顺序并不
3、难,只是要弄清这一dadd=newdad(1);原理需要用到一种并不太推荐的编码风格,同学们}是在这些冗繁的业务逻辑里被绕晕了。其实JVM在)执行过程中非常懂得“礼让”,把握这一主线则可以问题的运行结果为:guestTomguestdadguest很容易地理解和掌握这一点。1songuest2.这是一个比较直观的测试示例,在真正进行程一、问题及调查结果序设计时是不大适用的,在此仅为说明JVM的搜索为了能更清晰地说明问题,本文基于以下示例顺序。阁给予详细阐述。针对以上示例对一个正在学习Java语言的65classguest{人的
4、班级做了测试,测试结果如图1。publicguest0{System.out.print(“guest”);l测试结果lclassdad{guestg=newguest0;publicdad0{System.out.print(“dad”);)■publicdad(Strings){System.out.print(s);l■■一publicdad(inti){System.out.print(++i);J■-一■■lclasssonextendsdadf图1示例测试结果图收稿日期:2013一o9—20作者简介:武瑞婵(197
5、8一),女,山西昔阳人。讲师,硕士,研究方向:复杂性理论与并行计算。121武瑞婵其中,横坐标表示按顺序正确输出结果的个该方法前仍要搜索类中是否还有其它类成员函数、数,纵坐标表示相应的人数。结果显示,全班只有l6成员变量或是其它类的实例化操作,也就是要“先人能完全理解JVM的搜索顺序,其中l4人的结果人后己”。所以JVM又搜索到了dadd=newdad(“1完全正确,还有两人是调用构造方法时疏忽大意,”),在调用dad(Strings)时同[1]、[1]一样进行了礼将构造方法所带int型参数当作String型处理所致,让,最后才
6、执行son()语句。因此输出结果又顺序输但初始化顺序还是正确的。有31位同学错在了第出“guest1son”。五个输出结果上,其出错原因基本都是忽略了子类在经过了前面基本礼仪学习之后,最后结果中的实例化操作“dadd=newdad(“1”);”。同样有“guest2”的输出已变得很自然,仅仅是在执行dad16位同学不能理解对象的初始化顺序,其中完全不(inti)时注意文明礼让就ok了。懂的有6人,有模糊概念的有10人。还有两人错的事实上对于这类问题,熟悉原理是一方面,在比较可惜,在第六个输出结果的位置一个是看错了程序设计过程中
7、只要不在构造函数中插入过多的构造方法,另一个是漏掉了父类构造方法,导致了业务逻辑,出问题的概率也会低很多。f41最终结果的错误。三、继承关系中构造函数的调用原则二、对象初始化顺序中的“礼让’’原则在对象初始化过程中不可避免地要调用到构要使以上冗繁的程序逻辑变得清晰易懂,要学造函数,而构造函数在使用时要注意以下几点:会处处“礼让”。以下详细给出示例输出结果的详细如果一个类的父类没有无参构造函数,也就是解释。说父类自定义了一个带参的构造函数,那么系统不对象在初始化过程中,JVM会先加载顶级父会提供无参构造函数,此时子类在调用构造函
8、数的类,[3然后执行static代码。因而程序首先执行static时候必须最开始显式调用super(param)。daddl=newdad(“Tom”)。然而在实例化父类对象若一个类在定义的时候没有提供构造函数,d1时发现在dad类中有其它类的实例化操作,这就ivm会自动为该
此文档下载收益归作者所有