A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 〃FelayMan。 中级黑马   /  2014-5-15 20:00  /  1478 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
  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. */
复制代码

点评

谢谢  发表于 2014-5-15 21:40

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
看看什么答案
回复 使用道具 举报
今天刚学了Debug,你可以试着运行下。望采纳,谢谢
运行发现,静态代码块和静态变量执行顺序就是写的顺序,无先后。
但是只要类一加载,所有被static修饰的成员都会被加载
本题中,虽然是子类调用父类的静态成员,但由于只用了父类的name,而未访问子类成员,所以子类未加载。
回复 使用道具 举报
程序入口调用 System.out.println(Subclass.name); 加载Subclass类,调用其静态变量,类中的静态代码块会在加载类的过程中首先被执行 所以执行顺序为
1,System.out.println("superclass static");//静态代码块
2, System.out.println(Subclass.name);//main方法调用静态变量
执行结果为
superclass static
Subclass.name
回复 使用道具 举报
Subclass  extends SuperClass,在加载过程中先加载父类中的静态代码块
结果应该是
superclass static
felayman1

先前把代码看乱了  不好意思
回复 使用道具 举报
喜爱 高级黑马 2014-5-19 09:56:50
7#
从打印结果来看,子类的静态代码块没有执行,可以验证子类没有被加载,子类类名调用父类的成员变量,打印父类的成员变量值和调用父类的静态代码!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马