方法内的Java空 block 与其他 block 不同?

标签 java core object-initializers empty-list

我知道 block 定义了变量的范围。方法内的空 block 用于设置范围。但是为什么方法内部的空 block 初始化变量也与循环等使用的 block 不同。

class A{
    public static void main(String args[]){
        int a;
        int b:
        {
            a = 10;
        }
        for(int i = 0; i < 1; i++){
            b = 20;
        }
        System.out.println(b); //error here
        System.out.println(a);
        // doesnt give error and prints 10. why?
    }
}

我的问题是:为什么方法内的空 block 的属性与循环或条件 block 等使用的 block 不相似

最佳答案

因为 a 的 block 无论如何都会被执行,因为没有封闭的运算符。但是 b 是在循环内部初始化的,因此编译器认为 b = 20 仅在循环内部执行,如果循环未执行,则 b 未初始化。并且编译器不会运行您的代码来了解不存在不执行循环的代码路径。

关于方法内的Java空 block 与其他 block 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652117/

相关文章:

java - jmap 崩溃并显示 "can not get class data for"

javascript - smartGWT 错误

c++ - 尽管有非默认构造函数参数,但在 const 引用成员上调用默认构造函数

c++ - basic_string.tcc 中的核心转储 - 优化了

c# - 对象初始值设定项中的属性可以相互引用吗?

C# 3.0 对象初始化 - 是否有对象正在初始化的通知?

java - 我可以区分 org.apache.commons.cli 中的短选项和长选项吗

java - 富人意见箱

java - 如何在Java上检查一年中的星期六或星期日

java - fat-JAR 文件的外部化配置设置