在Java中,分号仅用于数组和枚举的大括号。 但我发现它在Android编码方面有所不同。例如,为什么在以下代码中} 之后会出现; :
Thread myThread=new Thread(){
@Override
public void run(){
// something
}
};
答案 0 :(得分:1)
“匿名类使您能够使代码更简洁。它们使您能够同时声明和实例化类。它们就像本地类,除了它们没有名称。如果您需要使用它们,请使用它们本地班只有一次。“
而不是做这样的事情:
class MyThread extends Thread {
@Override
public void run(){
// something
}
}
...
Thread myThread= new MyThread();
您可以使用匿名类以其他方式对代码进行排序。
Thread myThread=new Thread(){
@Override
public void run(){
// something
}
};
答案 1 :(得分:0)
这是一个匿名类的书籍示例,它反过来需要一个分号,因为你真的还在实例化Thread类。
答案 2 :(得分:0)
因为代码的格式仍为variable = statement;
代码块本质上是扩展Thread
类并使其成为内联匿名类。
由于这是Android,我假设您已经在某个时候制作了new View.OnClickListener() {}
,对吧?
同样的想法。将侦听器移出setOnClickListener
方法。
View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) { }
}; // <-- semi-colon
button.setOnClickListener(click);
答案 3 :(得分:0)
为尽可能以最通用的方式回答您的问题,当括号是表达式的一部分时,在右括号后加一个分号,并且该表达式出现在语句的末尾,该语句通常以分号。
在您的示例中,右括号是class instance creation expression的一部分,它在变量声明语句中使用。变量初始化语句始终以分号结尾,而不管初始化程序表达式是否恰好以右括号结尾。
另一个示例是array initializer expression:
int[] nums = new int[] { 1, 2, 3 };
第三个示例是lambda expression:
Function<String, Integer> lengthGetter = s -> { return s.length(); };
所有这些示例的共同点是,花括号是表达式的一部分,即它们是代码,其结果是可以将值赋给变量,作为参数传递等。包含这些表达式的语句要求分号末尾,表达式是否以右大括号结尾; 语句需要分号,而不是构成该语句一部分的表达式。