一个让98%的Java程序员犯难的偏门问题[Java编程]
本文“一个让98%的Java程序员犯难的偏门问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
一个学员曾经问了我一个他在sun公司的论坛上看到的怪问题,因为这个问题一向没有人解答,加上这个问题所触及的知识有点偏门,所以,我断言这个问题至少有98%的Java程序员不会!
(之所以这么断言,是因为我碰到的高手和低手程序员,仿佛并没有精神去研究那些琐碎的细节,并且他们工作中仿佛也不需求.假如你看到了这个问题,再去查书和考虑,终究找出答案,在这之前也应当算不会,呵呵,别的,100个java程序员中有2个会这个,并不过度,目前已经有2000人看了这篇文章,至少应当有40个人会这个问题,大家不要看下面有几个会的,就忽视了那些没有发表看法的看客,我的98%不浮夸).
假如你不会这个问题,并不代表你的水平比我低呵,因为这个问题只有我等孔乙几才去玩弄,各位看了,就当消遣.
问题:
public class Parent
{
public void test()
{}
public Parent()
{
test();
}
public static void main(String[] args)
{
new Child();
}
}
class Child extends Parent
{
private int instanceValue = 20;
public void test()
{
System.out.println("instance value is: " + instanceValue);
}
}
各位先猜猜打印的后果是多少呢?为什么呢?
----------------------------------------------------------------
答案:下面是摘自本人编写的《Java就业培训教程》中的一段报告,请大家注意第(4)步和第(5)步的讲授,调用完父类的构造办法后,接着才举行成员变量的显式初始化操作,上面代码中的private int instanceValue = 20;定义该当作两部份:第一部份是定义变量,第二部份是给变量赋值,变量定义位于父类构造办法之前,变量赋值位于父类构造办法之后.在父类的构造办法履行时,按照多态性,它会去调用子类中定义的test()办法,但是,这时刻,子类中的成员变量还没履行显式初始化操作, 关于private int instanceValue = 20;定义,instanceValue 的值为默许的初始化值0,所以,这时刻在test办法中打印出的值为0.
4.1.3子类对象的实例化历程
关于很多Java熟行来说,子类对象的实例化历程也不见得非常清楚,你大概并不需求完好理解子类对象的实例化历程,但理解后还是有好处的.
对象中的成员变量的初始化是按下述步骤举行的:
(1)分配成员变量的存储空间并举行默许的初始化,就是用new关键字产生对象后,对类中的成员变量按第三章的表3.1中的对应关系对对象中的成员变量举行初始化赋值.
(2)绑定构造办法参数,就是new Person(实际参数列表)中所传送进的参数赋值给构造办法中的情势参数变量.
(3)若有this()调用,则调用呼应的重载构造办法(被调用的重载构造办法又从步骤2开始履行这些流程),被调用的重载构造办法的履行流程完毕后,回到当前构造办法,当前构造办法直接跳转到步骤(6)履行.(反正要去调用父类的构造函数,假如调用this,那么this指向的构造函数就会去调用父类的构造函数,我这个构造函数本身就不用再调用父类的构造函数了,假如没有调用this,那我这个构造函数就必须去调用父类的构造函数)
(4)若有没有this()调用,显式或隐式追溯调用父类的构造办法(一向到Object类为止,Object是全部Java类的最顶层父类,/*在本章背脸部份有具体讲授*/),父类的构造办法又从步骤2开始对父类履行这些流程,父类的构造办法的履行流程完毕后,回到当前构造办法,当前构造办法持续往下履行.
(5)举行成员变量的显式初始化操作,也就是履行在定义成员变量时就对其举行赋值的语句,如:
public Student extends Person
{
String school = ”it315”;// 显式初始化
……
}
将“it315”赋值给school成员变量.
(6)履行当前构造办法的办法体中的程序代码,如:
public Student extends Person
{
public Student(String name,int age,String school)
{
super(name,age);
this.school = school;
}
}
以上是“一个让98%的Java程序员犯难的偏门问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |