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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苑桥别馆 中级黑马   /  2014-12-2 13:42  /  1151 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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类?

3 个回复

倒序浏览
  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
回复 使用道具 举报
学到了 嘻嘻
回复 使用道具 举报
学到了 哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马