发布一篇一个让98%的Java程序员犯难的偏门成绩
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开一个学员已经问了我一个他在sun公司的论坛上看到的怪成绩,由于这个成绩一向没有人解答,加上这个成绩所触及的常识有点偏门,以是,我断言这个成绩最少有98%的Java程序员不会!
(之以是这么断言,是由于我碰到的妙手和低手程序员,仿佛并没有精神往研讨那些噜苏的细节,而且他们事情中仿佛也不必要。假如你看到了这个成绩,再往查书和思索,终极找出谜底,在这之前也应当算不会,呵呵,别的,100个java程序员中有2个会这个,其实不太过,如今已有2000人看了这篇文章,最少应当有40团体会这个成绩,人人不要看上面有几个会的,就疏忽了那些没有宣布定见的看客,我的98%不夸大)。
假如你不会这个成绩,其实不代表你的程度比我低呵,由于这个成绩只要我等孔乙几才往玩弄,列位看了,就当消遣。
成绩:
publicclassParent
{
publicvoidtest()
{}
publicParent()
{
test();
}
publicstaticvoidmain(String[]args)
{
newChild();
}
}
classChildextendsParent
{
privateintinstanceValue=20;
publicvoidtest()
{
System.out.println("instancevalueis:"+instanceValue);
}
}
列位先猜猜打印的了局是几呢?为何呢?
----------------------------------------------------------------
谜底:上面是摘自自己编写的《Java失业培训教程》中的一段报告,请人人注重第(4)步和第(5)步的解说,挪用完父类的机关办法后,接着才举行成员变量的显式初始化操纵,下面代码中的privateintinstanceValue=20;界说应当作两部分:第一部分是界说变量,第二部分是给变量赋值,变量界说位于父类机关办法之前,变量赋值位于父类机关办法以后。在父类的机关办法实行时,依据多态性,它会往挪用子类中界说的test()办法,但是,这时候候,子类中的成员变量还没实行显式初始化操纵,关于privateintinstanceValue=20;界说,instanceValue的值为默许的初始化值0,以是,这时候候在test办法中打印出的值为0。
4.1.3子类对象的实例化历程
关于很多Java内行来讲,子类对象的实例化历程也不见得十分分明,你大概其实不必要完整懂得子类对象的实例化历程,但懂得后仍是有优点的。
对象中的成员变量的初始化是按下述步骤举行的:
(1)分派成员变量的存储空间并举行默许的初始化,就是用new关头字发生对象后,对类中的成员变量按第三章的表3.1中的对应干系对对象中的成员变量举行初始化赋值。
(2)绑定机关办法参数,就是newPerson(实践参数列表)中所传送进的参数赋值给机关办法中的情势参数变量。
(3)若有this()挪用,则挪用响应的重载机关办法(被挪用的重载机关办法又从步骤2入手下手实行这些流程),被挪用的重载机关办法的实行流程停止后,回到以后机关办法,以后机关办法间接跳转到步骤(6)实行。(归正要往挪用父类的机关函数,假如挪用this,那末this指向的机关函数就会往挪用父类的机关函数,我这个机关函数自己就不必再挪用父类的机关函数了,假如没有挪用this,那我这个机关函数就必需往挪用父类的机关函数)
(4)若有没有this()挪用,显式或隐式追溯挪用父类的机关办法(一向到Object类为止,Object是一切Java类的最顶层父类,/*在本章前面部分有具体解说*/),父类的机关办法又从步骤2入手下手对父类实行这些流程,父类的机关办法的实行流程停止后,回到以后机关办法,以后机关办法持续往下实行。
(5)举行成员变量的显式初始化操纵,也就是实行在界说成员变量时就对其举行赋值的语句,如:
publicStudentextendsPerson
{
Stringschool=”it315”;//显式初始化
……
}
将“it315”赋值给school成员变量。
(6)实行以后机关办法的办法体中的程序代码,如:
publicStudentextendsPerson
{
publicStudent(Stringname,intage,Stringschool)
{
super(name,age);
this.school=school;
}
}
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) Java是一种计算机编程语言,拥有跨平台、面向对java 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 是一种使用者不需花费很多时间学习的语言 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
页:
[1]