黑马程序员技术交流社区

标题: 关于类的初始化 [打印本页]

作者: 苑桥别馆    时间: 2014-12-2 13:42
标题: 关于类的初始化
  1. <div class="blockcode"><blockquote><p>class Main
  2. {
  3.         public static final int a=2*3;
  4.         static {
  5.                         System.out.println("init Main");               
  6.                 }
  7.         public static void main(String[] args)
  8.         {
  9.                         System.out.println(Main.a);               
  10.         }
  11. };</p><p>//这个打印结果为 6</p>
复制代码

class TestObject
{
        public static final int a=2*3;
        static {
                        System.out.println(123);               
                }
}
class Main2
{
        public static void main(String[] args)
        {
                        System.out.println( TestObject.a);               
        }
};//这个打印结果为什么却为
//init TestObject
//6

为什么第一段代码没有初始化Main类,而第二段代码却初始化了Main2类?


作者: relice    时间: 2014-12-2 21:12
  1. class Test
  2. {
  3.         public static final int a=2*3;
  4.         static {
  5.                         System.out.println("init Main");               
  6.                 }
  7.         public static void main(String[] args)
  8.         {
  9.                         System.out.println(Test.a);               
  10.         }
  11. }
复制代码


第一段代码是这样吧.因为编译一个类的时候会出现一个字节码文件,这时最先初始化静态代码块,所以输出结果是,
init Main
6
第二段代码你只是启动了main函数吧,那么肯定TestObject类就不会给初始化了,除非你实例下TestObject
作者: 禾青青    时间: 2014-12-3 23:37
学到了 嘻嘻
作者: 斷灬dian    时间: 2014-12-29 11:58
学到了 哈哈




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