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

为什么此Java代码在方法之外使用花括号({})?

束飞捷
2023-03-14
问题内容

我已经准备好参加Java认证考试,并且在其中一项练习测试中看到了类似的代码:

class Foo {  
    int x = 1;  
    public static void main(String [] args) {  
        int x = 2;  
        Foo f = new Foo();  
        f.whatever();  
    }  
    { x += x; }  // <-- what's up with this?
    void whatever() {  
        ++x;  
        System.out.println(x);  
    }  
}

我的问题是…在方法外用花括号编写代码是否有效?这些(如果有)有什么影响?


问题答案:

从这里借来的-

通常,您需要将代码放在构造函数中以初始化实例变量。使用构造函数初始化实例变量有两种选择:初始化块和final方法。实例变量的初始化块看起来像静态初始化块,但没有static关键字:

{
    // whatever code is needed for initialization goes here
}

Java编译器将初始化程序块复制到每个构造函数中。因此,该方法可用于在多个构造函数之间共享代码块。



 类似资料:
  • 问题内容: 在方法或类范围内,下面的行进行编译(带有警告): 在类范围中, 变量获取其默认值 ,以下给出“未定义引用”错误: 它不是第一个应该以相同的“未定义参考”错误结束吗?还是第二行应该编译?还是我缺少什么? 问题答案: tl; dr 对于 字段 ,是非法的,因为它是对的非法前向引用。您实际上可以通过编写来解决此问题,该文件可以毫无抱怨地进行编译。 对于 局部变量 ,是非法的,因为未在使用前进

  • 问题内容: 我看到Google用尖括号注释了一些Java代码。 例如: 这种风格有什么特殊用途吗? 问题答案: 这些片段是Firebase文档的链接器。 您可以在Firebase站点上单击类名,然后转到示例代码的相应块。 很难说它是动态生成的HTML,但是对于纯Java中的注释没有这种特殊的语法

  • 问题内容: public int add(int a, int b){ while (b != 0){ int carry = (a & b) ; 这是使用按位运算来计算两个整数之和的代码。 如果我手动/编程计算,我会看到它适用于每个整数。但是我无法弄清楚和之间的中间值之间的任何关系。为什么将进位乘以2分配给? PS:我在Java中找到了一个按位乘法和 加法的答案,但这是乘法而不是加法。 问题答案

  • 我刚开始在 futurelearn.com 学习编程。 我有一个位图和一个球。任务是编码x方向的边界。 工作代码如下所示: 但我有一个逻辑问题。我想知道为什么我不能用“==”代替“ 这是了解的视频。它应该包含所有可能缺少的信息。 https://www.futurelearn.com/courses/begin-programming/7/steps/42942

  • 问题内容: 当我运行以下代码时: 我希望按以下顺序获得输出: 但是我得到的却是相反的顺序: 谁能解释为什么输出顺序相反? ================ 另外,当我创建多个的实例时: 静态块 仅 在第一次执行。 问题答案: 这完全取决于初始化语句的执行顺序。您的测试表明此顺序为: 静态初始化块 实例初始化块 建设者 编辑 感谢您的评论,现在我可以引用JVM规范中的相应部分。这是详细的初始化过程。

  • 风格: 日志消息:10-10 13:20:01.184:E/AndroidRuntime(1417):致命异常:main 10-10 13:20:01.184:E/AndroidRuntime(1417):android。看法WindowManager$BadTokenException:无法添加窗口--android令牌。应用程序。本地活动管理器$LocalActivityRecord@411e