当前位置: 首页 > 面试题库 >

Java空块范围

贲功
2023-03-14
问题内容

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

    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

    }

有人可以解释

  1. 在什么情况下,我们要使用空块。
  2. 空块内的所有变量是否仍在继续stack
  3. 为什么无法访问static variable x

问题答案:
  1. 您在帖子中显示的块不是空块,而是静态初始化器。它用于为类的静态变量提供非平凡的初始化
  2. 在初始化期间使用的局部变量进入堆栈,但从堆分配的对象除外
  3. 您不能访问静态变量,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));
    }
}


 类似资料:
  • 问题内容: 这将编译 这不会 我希望两者都能编译(也许这是C的工作方式?)。是什么原因导致无法在外部块中以相同的名称声明一个块中的变量? 问题答案: 简短的答案是:因为这是JLS§6.4中定义Java语言的方式。 您可能从其他语言中使用过,因此允许使用所谓的可变阴影。但是,Java语言的发明者认为这是一个笨拙的功能,他们不希望使用其语言: 此限制有助于检测其他一些非常模糊的错误。 但是,正如作者在

  • 我有一个960x540窗口,我正在使用OpenGL创建。在这里渲染一个纹理,并使用imgui实现一个滑块,让我在运行时翻译x、y和z位置。 首先,我设置滑块默认值。 稍后,在我的循环中,只要窗口打开,就会逐帧渲染对象的位置,我将ImGui::SliderFloat3和v\u min参数设置为窗口的尺寸。似乎所有3个滑块x、y和z都使用这些值,但是否有方法为每个滑块设置范围?正如你所看到的,我的y轴

  • coolie 遵循的是 CMD 规范。 CMD 规范 CMD 最先是由 seajs 提出的,是 commonJS 规范的前端实现。 与 commonJS 的表现是一致的,即:依赖就近,顺序执行。 define(function(require, exports, module){ var xhr = require('./xhr.js'); xhr.ajax(...); });

  • 问题内容: 以下方法不起作用,因为内部块声明的变量与外部块中的变量同名。显然,变量属于声明它们的方法或类,而不属于声明它们的块,因此,我无法编写一个简短的临时临时块进行调试,而恰好将外部作用域中的变量压入阴影只是片刻: 我使用过的几乎每种块范围语言都支持此功能,包括我在学校为解释器和编译器编写的琐碎小语言。Perl可以做到这一点,Scheme甚至C都可以做到。甚至PL / SQL也支持这一点! J

  • 我正在尝试定制一个范围滑块根据我的需要我几乎在那里除了它的方向,目前它是水平对齐的,应该是垂直的。 我尝试添加和以及 不走运。 当前代码库如下:Style 标记 是不是我漏了什么?如有任何帮助,我们将不胜感激。谢谢

  • 问题内容: 我最近开始使用AngularJS,现在构建应用的方式是这样的: MainController.js SomeController.js Im遇到的问题是范围未在模块之间共享。例如,无法从 MainController 获得变量“ test”。 最佳做法是什么?是否将所有控制器都以1个文件存储在1个模块中? 我如何能有1个页面和2个控制器并在它们之间共享,还是可以将所有内容仅放在一个控制