java - 为什么变量在循环内可见而在循环外看不到?

标签 java initialization compiler-errors

我有以下代码:

    String serviceType;
    ServiceBrowser tmpBrowser;
    for (String playerName: players) {
        serviceType = "_" + playerName + "._tcp";
        tmpBrowser = BrowsersGenerator.getBrowser(serviceType);
        tmpBrowser.browse();
        System.out.println(tmpBrowser.getStatus());
    }       
    System.out.println(tmpBrowser.getStatus());

编译器提示最后一行。它写道“变量 tmpBrowser 可能未初始化”。如果我评论最后一行,编译不会提示。

最佳答案

如果没有玩家,则tmpBrowser无论如何都不会被初始化。编译器无法预测是否有玩家。此外,与字段(在方法 block 外部声明的类/实例变量)相反,局部变量(在方法 block 内部声明)不会使用默认值进行预初始化。您需要通过自己预初始化来让编译器满意:

ServiceBrowser tmpBrowser = null;

(不要忘记在 getStatus() 之前进行空检查,否则可能会面临 NPE 风险)。

关于java - 为什么变量在循环内可见而在循环外看不到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470762/

相关文章:

c - 在此函数中使用未初始化的数组

Swift 结构初始化,使另一个结构像 String

java - 如何将类型为byte []的对象转换为字符串

c++ - 在#define 中使用双冒号 (::)

java - 角度的模运算给出不正确的结果

java - 如何计算 JGit 中插入/删除的行数

java - 调用时更改从 Netbeans 运行的 Tomcat 的 Java 版本

c - 如何从 C 结构体数组中初始化单个元素?

oracle - Oracle函数错误: ORA-00932: inconsistent datatypes: expected CHAR got MDSYS.SDO.GEOMETRY

java - 为什么我的方法没有清空 ArrayList<Card>?