我看到了奇怪的情况:在我的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
。当我看到半音时,我解除了问题所在。但这让我很难过,有人可以解释一下它是什么吗?
答案 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
}
}