Roid:if();不要引起任何禁令

时间:2013-09-18 15:44:02

标签: java android if-statement syntax

我看到了奇怪的情况:在我的Android应用程序代码中使用类似的东西时我没有收到任何错误:

@Override
public void onBackPressed() {

        if (getActionBar().getSelectedTab().getPosition()==1)**;**
        {
            if ( getFragmentManager().findFragmentByTag("Tag B") instanceof ContactsArchiveFragment)
            {
                    final ContactsArchiveFragment fragment = (ContactsArchiveFragment) getFragmentManager().findFragmentByTag("Tag B");

                if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not

                    Log.i("calls act back cont archive", "on back clicked");
                    super.onBackPressed();
                }
            }

        }

}

当我尝试做这样的事情时:

    @Override
public void onBackPressed() {

        if (getActionBar().getSelectedTab().getPosition()==1);
        {
            if ( getFragmentManager().findFragmentByTag("Tag B") instanceof ContactsArchiveFragment)
            {
                    final ContactsArchiveFragment fragment = (ContactsArchiveFragment) getFragmentManager().findFragmentByTag("Tag B");

                if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not

                    Log.i("calls act back cont archive", "on back clicked");
                    super.onBackPressed();
                }
            }

        }
        else
        {

        }

}

我收到了Syntax error on token "else", delete this token。当我看到半音时,我解除了问题所在。但这让我很难过,有人可以解释一下它是什么吗?

3 个答案:

答案 0 :(得分:7)

  

但这让我很难过,有人可以解释一下它是什么吗?

当然 - ;只是一个空语句,没有if的块也没关系。例如,这是有效的:

if (i == 0)
    System.out.println("i was 0");

System.out.println("In top-level block");

{
    System.out.println("In a block");
}

... if之后的分号与具有空体的第一个if语句相当。

我个人总是使用大括号来表示if语句(以及while语句等)。一些编译器(例如Eclipse中内置的编译器)允许您在使用这样的空语句时发出警告或错误。

else表单无效,因为您只能在else / if语句中添加else子句,而if表单声明已经在分号结束处“完成”。

答案 1 :(得分:4)

当您只有if时:

if();
{
    // Supposed to be with if
}

应该与if一起使用的块现在只是一个独立于if的本地块。 if语句以分号结尾。编译器不会将其标记为错误,因为它完全是有效的代码。

现在你的第二个案例:

if ();
{

} else {

}

请注意,if语句仅以分号结束,然后您有一个块。但else之后不会出现if,因为它需要来。所以,它实际上是一个没有else的{​​{1}}。

这类似于此代码中出现错误的情况:

if

就是这样,上面的情况在第一眼就很明显了。所以它就像:

if () {

} 
System.out.println("Hello");
else {  // Error. Which `if` block do you suppose else to be bound with?

}

可视化为:

if (); 

相当于一个空if() ; // Empty statement 块 - if

答案 2 :(得分:1)

额外;导致所有混乱。

那个分号终止了那里的statement,并假设它是一个新的块,从那里开始。

如果你仔细观察

  if (getActionBar().getSelectedTab().getPosition()==1);  <----

这是一个陈述,而不是一个if条件。

条件应该是

 if (getActionBar().getSelectedTab().getPosition()==1){


}

删除额外的;

如果您看到docs与块相关,

  

块是平衡大括号之间的一组零个或多个语句,可以在允许单个语句的任何位置使用。以下示例BlockDemo说明了块的使用:

class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // begin block 1
               System.out.println("Condition is true.");
          } // end block one
          else { // begin block 2
               System.out.println("Condition is false.");
          } // end block 2
     }
}