黑马程序员技术交流社区

标题: 执行结果和你想的一样吗 [打印本页]

作者: 请备注    时间: 2014-4-4 00:02
标题: 执行结果和你想的一样吗
class StaticCode
{       
        StaticCode()
        {
            System.out.println("c");
        }

        static        
        {
            System.out.println("a");
        }

}


public class StaticDemo
{
        static
        {
            System.out.println("b");
        }

        public static void main(String[] args)
        {
            new StaticCode();
            new StaticCode();
            System.out.println("over");
        }
}       

执行结果 b  
             a
             c   
             c   
             over      
作者: Up↑Lee↗    时间: 2014-4-4 08:27
你程序里有静态代码块:
  1. static
  2. {
  3.         静态代码块中的执行语句。
  4. }

  5. <font color="#ff00ff">特点:随着类的加载而执行,只执行一次,并优先于主函数(优先于对象)。</font>
  6. 用于给类进行初始化的。
复制代码
所以先执行StaticDemo类的static。然后执行上边的static,然后才会到主函数

作者: muma    时间: 2014-4-4 08:34
不一样 我想的结果是
b
a
c
a
c
over
作者: 松毛    时间: 2014-4-4 08:45
muma 发表于 2014-4-4 08:34
不一样 我想的结果是
b
a

静态代码块是给类初始化的,所以它只会执行一次。
  1. static         
  2.         {
  3.             System.out.println("a");
  4.         }
复制代码

虽说new了两个对象,但它只执行了一次。



作者: muma    时间: 2014-4-4 08:49
奥 对我想起来了 对 是这样的 谢谢
作者: 郭黎明    时间: 2014-4-4 08:57
public class StaticDemo
        {
                static
                {
                    System.out.println("b"); //jvm先找main函数,然后加载它所在的类,
                                            //   所以当加载StaticDemo时就加载了静态
                                            // 代码块,所以首先会打印出b
                }                                    

                public static void main(String[] args)
                {
                    new StaticCode();  //在类中静态代码块的优先级高于构造函数,
                                      //所以先打印a,然后才是构造函数中c
                    new StaticCode(); //在类中静态代码块只加载一次以后就不再加载了,
                                      //所以这里只加载构造函数打印c
                    System.out.println("over");//最后打印over
                }
        }        




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