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

前端之家收集整理的这篇文章主要介绍了java – 为什么编译器构建在某些情况下返回无法访问的代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我写
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";
}

猜你在找的Java相关文章