黑马程序员技术交流社区

标题: 一道题考你对类及对象加载运行顺序的理解程度 [打印本页]

作者: 探索者    时间: 2015-5-25 13:02
标题: 一道题考你对类及对象加载运行顺序的理解程度
注意:代码运行的是类CarDemo3,先不要看结果,答案回复后可见
  1. class  CarDemo1 extends CarDemo3
  2. {
  3.         public  static void main(String[] args)
  4.         {
  5.                 System.out.println("Hello---1");
  6.                
  7.         }
  8.         CarDemo1()
  9.         {
  10.                 name="王五";
  11.                 String[] str= {"abc","def"};
  12.                 main(str);
  13.                 System.out.println("Hello---11");
  14.         }
  15. }

  16. class  CarDemo2 extends CarDemo1
  17. {
  18.         String name;
  19.         public static void main(String[] args)
  20.         {
  21.                 System.out.println("Hello World!---2");
  22.         }
  23.         {
  24.                 CarDemo1 car= new CarDemo1();
  25.                 System.out.println(name);
  26.         }
  27. }
  28. class  CarDemo3
  29. {
  30.         String name="张三";
  31.         public static void main(String[] args)
  32.         {
  33.                 System.out.println("Hello---3");
  34.                 CarDemo2 car= new CarDemo2();
  35.         }
  36.         {
  37.                 name="李四";
  38.                 System.out.println(name);
  39.         }
  40.        
  41. }
复制代码



作者: Huylens    时间: 2015-5-25 13:25
hello--3;李四;王五;hello--11;hello1
作者: 探索者    时间: 2015-5-25 13:32
Huylens 发表于 2015-5-25 13:25
hello--3;李四;王五;hello--11;hello1

答案不对

作者: Huylens    时间: 2015-5-25 14:41
探索者 发表于 2015-5-25 13:32
答案不对

为什么我把代码拷贝到eclipse中运行,结果只有hello--1,怎么解决?
作者: 探索者    时间: 2015-5-25 15:26
Huylens 发表于 2015-5-25 14:41
为什么我把代码拷贝到eclipse中运行,结果只有hello--1,怎么解决?

刚才复制了代码到editplus里,没有问题,eclipse里没有试过
作者: 青蜂侠    时间: 2015-5-25 15:27
果然被难住了……理解的还是不够好啊
作者: 探索者    时间: 2015-5-25 15:50
Huylens 发表于 2015-5-25 14:41
为什么我把代码拷贝到eclipse中运行,结果只有hello--1,怎么解决?

复制到eclipse里,运行也没问题,在eclipse里运行的时CarDemo3,所以最好把源文件命名为
CarDemo3.以防出错
作者: 城北一直晴。    时间: 2015-5-25 16:29
hello------3
李四
hello------1
hello------11
李四
hello------1
hello------11
null
我的答案
作者: dianxiaoer    时间: 2015-5-25 16:41
Hello---3;Hello---1;"Hello World!---2; 王五;李四
作者: Ezreal    时间: 2015-5-25 17:11
看看答案
作者: java8023    时间: 2015-5-25 17:32
我的答案和8楼一样
Hello---3
李四
Hello---1
Hello---11
李四
Hello---1
Hello---11
null
作者: Huylens    时间: 2015-5-25 18:41
能说下你的理解吗?
作者: pisces    时间: 2015-5-25 19:27
被难到了
作者: l598790586    时间: 2015-5-25 20:04
应该CarDemo1类中的main执行完就不会走了吧
作者: csu050416    时间: 2015-5-25 22:46
赞一个!
作者: 探索者    时间: 2015-5-26 12:14
Huylens 发表于 2015-5-25 18:41
能说下你的理解吗?

1.运行的是CarDemo3,所以从程序从CarDemo3的主程序开始执行,此时执行“System.out.println("Hello---3");”
   打印:Hello---3
2.执行“CarDemo2 car= new CarDemo2();”,发现CarDemo2有父类CarDemo1,而
CarDemo1又有父类CarDemo3,所以初始化CarDemo3,
   打印:李四
3,接下来初始化CarDemo1,
  打印:Hello---1
            Hello---11
4.初始化CarDemo2,执行“String name;”是将原name值覆盖为默认初始化值null,
接下来执行“CarDemo1 car= new CarDemo1();”这通之前的父类加载同理,先初始化
CarDemo3,
  打印:李四
再初始化CarDemo1,
打印:Hello---1
            Hello---11
5.执行“System.out.println(name);”此时的name已经被覆盖了为null了,
打印:null
6.CarDemo3的主函数执行完毕,结束。
   
作者: 18530919536    时间: 2015-5-26 21:51
我也没看懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2