Java中的匿名代码块

Java中的匿名代码块

Java中是否存在匿名代码块的实际用途?

public static void main(String[] args) {
    // in
    {
        // out
    }}

请注意,这不是关于命名块,即

name: { 
     if ( /* something */ ) 
         break name;}


明月笑刀无情
浏览 791回答 3
3回答

慕码人2483693

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

心有法竹

通常最好使局部变量的范围尽可能小。匿名代码块可以帮助解决这个问题。我发现这对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防止它!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java