当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

一个让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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 一个让98%的Java程序员犯难的偏门问题
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .