黑马程序员技术交流社区

标题: 求解释这段代码执行结果 [打印本页]

作者: 〃FelayMan。    时间: 2014-5-15 20:00
标题: 求解释这段代码执行结果
  1. package com.felay.test;
  2. class SuperClass{
  3.         public static String name = "felayman1";
  4.         static {
  5.                 System.out.println("superclass static");
  6.         }
  7. }
  8. class Subclass  extends SuperClass{
  9.         static {
  10.                 System.out.println("subclass static");
  11.         }
  12. }

  13. public class Test {
  14.         public static void main(String[] args) {
  15.                 System.out.println(Subclass.name);
  16.         }
  17. }
复制代码

作者: 谢振宣    时间: 2014-5-15 20:27
  1. class SuperClass{
  2.         public static String name = "felayman1";
  3.         static {
  4.                 System.out.println("superclass static");
  5.         }
  6. }
  7. class Subclass  extends SuperClass{
  8.         static {
  9.                 System.out.println("subclass static");
  10.         }
  11. }

  12. public class Demo {
  13.         public static void main(String[] args) {
  14.                 System.out.println(Subclass.name);
  15.         }
  16. }
  17. /*
  18. *superclass static
  19. *felayman1
  20. *以上为运行结果。
  21. *由于并没有访问到子类的特有成员,子类并不会被加载。
  22. *静态代码块是给类做初始化的,要先加载父类的静态代码块。
  23. *然后再加载父类的成员变量,并进行显示初始化。
  24. */
复制代码

作者: 假Rǔ有⒈兲    时间: 2014-5-15 21:36
看看什么答案
作者: 千里一醉    时间: 2014-5-18 22:19
今天刚学了Debug,你可以试着运行下。望采纳,谢谢
运行发现,静态代码块和静态变量执行顺序就是写的顺序,无先后。
但是只要类一加载,所有被static修饰的成员都会被加载
本题中,虽然是子类调用父类的静态成员,但由于只用了父类的name,而未访问子类成员,所以子类未加载。
作者: More    时间: 2014-5-19 09:13
程序入口调用 System.out.println(Subclass.name); 加载Subclass类,调用其静态变量,类中的静态代码块会在加载类的过程中首先被执行 所以执行顺序为
1,System.out.println("superclass static");//静态代码块
2, System.out.println(Subclass.name);//main方法调用静态变量
执行结果为
superclass static
Subclass.name
作者: More    时间: 2014-5-19 09:17
Subclass  extends SuperClass,在加载过程中先加载父类中的静态代码块
结果应该是
superclass static
felayman1

先前把代码看乱了  不好意思
作者: 喜爱    时间: 2014-5-19 09:56
从打印结果来看,子类的静态代码块没有执行,可以验证子类没有被加载,子类类名调用父类的成员变量,打印父类的成员变量值和调用父类的静态代码!




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