加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么编译器构建在某些情况下返回无法访问的代码

发布时间:2020-12-15 00:40:10 所属栏目:Java 来源:网络整理
导读:如果我写 private void check(){ if(true) return; String a = "test";} 上面的代码工作正常,但如果我写 private void check(){ return; String a = "test";} Android Studio中的编译器/ gradle虽然它是相同的,但它不会让这个通过,并且它表示在示例2中返回后
如果我写
private void check(){
   if(true)
      return;

   String a = "test";
}

上面的代码工作正常,但如果我写

private void check(){
   return;

   String a = "test";
}

Android Studio中的编译器/ gradle虽然它是相同的,但它不会让这个通过,并且它表示在示例2中返回后的代码无法访问.

我对此没有任何问题,但我很想知道为什么?

解决方法

这可以通过Java语言规范的 Unreachable Statements部分来解释.

有一些规则,有一个有趣的特殊情况.这是一个编译时错误:

while (false) {
    // this code is unreachable
    String something = "";
}

虽然这不是:

if (false) {
    // this code is considered as reachable
    String something = "";
}

给出的原因是允许某种条件编译,例如:

static final boolean DEBUG = false;
...
if (DEBUG) { x=3; }

所以在你的情况下:

private void check(){
    if(true)
        return;

    // NO compilation error
    // this is conditionnal code
    // and may be omitted by the compiler
    String a = "test";
}

因为特殊的if治疗不是错误,使用while而不是接受:

private void check(){
    while(true)
        return;

    // "Unreachable statement" compilation error
    String a = "test";
}

这也是错误的:

private void check(){
    if(true)
        return;
    else
        return;

    // "Unreachable statement" compilation error
    String a = "test";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读