我想知道使用空块的目的是什么。例如,

    static{
        int x = 5;
    }

    public static void main (String [] args){

          int i = 10;

          {
               int j = 0 ;
               System.out.println(x);  // compiler error : can't find x ?? why ??
               System.out.println(i);  // this is fine
          }
          System.out.println(j); //compiler error :  can't find j

    }

有人可以解释吗
  • 在什么情况下,我们想使用空块。
  • 该空块中的所有变量是否仍在stack上进行?
  • 为什么无法访问static variable x
  • 最佳答案

  • 您在帖子中显示的块不是一个空块,它是一个静态初始化程序。它用于为类
  • 的静态变量提供非平凡的初始化
  • 在初始化期间使用的局部变量进入堆栈,但从堆
  • 中分配的对象除外
  • 因为未声明静态变量x,所以无法访问它。相反,您在静态初始化程序中声明了局部变量x

  • 如果要使x为静态变量,然后在静态初始化块中对其进行初始化,请执行以下操作:
    private static int x;
    static {
        x = 5;
    }
    

    在这样的琐碎情况下,简单的初始化语法最有效:
    private static int x = 5;
    

    初始化程序块是为更复杂的工作保留的,例如,当您需要使用循环初始化结构时:
    private static List<List<String>> x = new ArrayList<List<String>>();
    static {
        for (int i = 0 ; i != 10 ; i++) {
            x.add(new ArrayList<String>(20));
        }
    }
    

    09-11 18:15