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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adamjy 中级黑马   /  2014-4-22 00:29  /  1434 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 adamjy 于 2014-4-22 12:36 编辑

代码如下,为什么Test01类中的静态代码块没有执行?
  1. public class Demo{

  2.         public static void main(String[] args){
  3.                 System.out.println(Test01.serialVersion);
  4.         }
  5. }

  6. class Test01
  7. {
  8.     public static final long serialVersion=1L;

  9.     static
  10.     {
  11.         //此代码没有打印
  12.         System.out.println("Static code block invoked.");
  13.     }
  14. }
复制代码

4 个回复

倒序浏览
要new对象它才会执行吧!
回复 使用道具 举报
静态代码块作用:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。
特别要注意:静态代码块随着类的加载而执行,而且只执行一次
看我下面的代码:
public class Test3 {
        public static void main(String[] args) {
                  System.out.println(Test01.serialVersion);
                  Test01 t1 = new Test01();
                  Test01 t2 = new Test01();
        }
}

class Test01
{
    public static final long serialVersion=1L;

    static
    {
        //此代码没有打印:是因为你没有new看主函数中的代码
        System.out.println("Static code block invoked.");
    }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
静态代码块儿优先于构造函数执行,在类加载的时候就加载了。
你的代码中,没有声明并加载类,需要Test01 t  = new Test01(); 就可以显示了
回复 使用道具 举报
四川男人 发表于 2014-4-22 01:03
静态代码块儿优先于构造函数执行,在类加载的时候就加载了。
你的代码中,没有声明并加载类,需要Test01 t  ...

没有Test01 t = new Test01();该语句,就表示Test类没有加载吗?
如果是这样,那么在new之前的语句 System.out.println(Test01.serialVersion);执行了,且输出结果1。在执行该语句时,Test01类同样还没有加载吧,那么是如何访问到serialVersion这个静态变量的呢?
既然在main方法里能够访问到Test01类里面的serialVersion这个静态变量,那么应该说明该类已经加载过了。可是静态语句块static{System.out.println(Static code block invoked.);}又没有执行,这究竟是怎么一回事呢?
请详细解答。感谢!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马