我有以下代码:
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/