Java中的匿名代码块Java中是否存在匿名代码块的实际用途?public static void main(String[] args) {
// in
{
// out
}}请注意,这不是关于命名块,即name: {
if ( /* something */ )
break name;}
3 回答

慕码人2483693
TA贡献1860条经验 获得超9个赞
它们限制了变量范围。
public void foo(){ { int i = 10; } System.out.println(i); // Won't compile.}
但实际上,如果你发现自己使用了这样一个代码块,那可能就是你想要将那个块重构为一个方法的迹象。

心有法竹
TA贡献1866条经验 获得超5个赞
通常最好使局部变量的范围尽可能小。匿名代码块可以帮助解决这个问题。
我发现这对switch
语句特别有用。考虑以下示例,没有匿名代码块:
public String manipulate(Mode mode) { switch(mode) { case FOO: String result = foo(); tweak(result); return result; case BAR: String result = bar(); // Compiler error twiddle(result); return result; case BAZ: String rsult = bar(); // Whoops, typo! twang(result); // No compiler error return result; }}
并使用匿名代码块:
public String manipulate(Mode mode) { switch(mode) { case FOO: { String result = foo(); tweak(result); return result; } case BAR: { String result = bar(); // No compiler error twiddle(result); return result; } case BAZ: { String rsult = bar(); // Whoops, typo! twang(result); // Compiler error return result; } }}
我认为第二个版本更清晰,更容易阅读。并且,它减少了在切换到声明它们的情况下声明的变量的范围,根据我的经验,这是你想要99%的时间。
但要注意,它并没有改变案件掉落的行为 - 你仍然需要记住包括break
或return
防止它!
添加回答
举报
0/150
提交
取消