为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的匿名代码块

Java中的匿名代码块

明月笑刀无情 2019-08-13 14:41:34
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.}

但实际上,如果你发现自己使用了这样一个代码块,那可能就是你想要将那个块重构为一个方法的迹象。


查看完整回答
反对 回复 2019-08-13
?
心有法竹

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%的时间。

但要注意,它并没有改变案件掉落的行为 - 你仍然需要记住包括breakreturn防止它!


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 814 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号