解决方案 »

  1.   

    再回头把static看看,就清楚了。
      

  2.   

    lz 第一个类的main方法里面即是什么都不写,也会输出“【1】静态代码块”
    main方法的调用会使当前类被初始化,所以静态代码块就会被执行第二个代码 final常量的调用不会导致类的初始化,但是若常量的内容是当前类的一个对象则除外

    public final static Student s = new Student(); 
      

  3.   

    JVM加载类时会执行静态的代码块而且仅有一次,final 和 static一起使用可以理解为全局常量,不会初始化类
      

  4.   

    是的。编译时常量在编译时被 inline 处理,就是说
    System.out.println(Student.FIANL_STATIC_STRING);
    在编译后等同于
    System.out.println("【2】final修饰的静态常量");也就跟 Student 类没什么关系了,即使 Student 类运行时不在 classpath 内也无所谓。
      

  5.   


    这里的粗体部分不对。
    final 修饰的未必是编译时常量,楼主可以搜索一下关于Java编译时常量的介绍。