更新:之前没有想象它,但现在我可以!谢谢!保留这个问题以防万一有人犯了同样的错误......
ORIGINAL:
我在java中相当生疏。我注意到在实例化View.OnClickListener
对象后,我不得不在}
之后添加分号。我也在})
之后看过分号。
为什么在;
和}
之后有})
?
这是我正在查看的代码:
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
};
答案 0 :(得分:0)
它的存在是因为在其中声明了View.OnClickListener
的新接口,实现了方法okClick
,并且在任何声明中都跟着一个分号,就像为EX
答案 1 :(得分:0)
这是Java。在Java中,您使用分号结束语句,告诉编译器它是语句的结尾。
由于anonymous class声明,您似乎感到困惑。事实上,它只是像所有其他陈述一样的陈述。
检查此声明,有什么问题吗?
View.OnClickListener listener = new View.OnClickListener() { myVariable };
现在用myVariable
代替:
@Override
public void onClick(View v) {
...
}
这就是你得到的:
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
};
我们也可以把它写成一行,但读起来太丑了:
View.OnClickListener listener = new View.OnClickListener(){@Override public void onClick(View v) {} };
答案 2 :(得分:0)
取决于您进行声明的地方。如果它在执行路径中,则分号声明语句的结尾。这有助于编译器理解如何拆分和解释您的指令序列,因为它将代码扩展为特定格式。
如果它们在执行路径之外定义,即在类级别定义,则分号是多余的。同样,这些是由于选择不同的结构可以用语言表示。
IDE现在非常聪明,他们可能会建议您使用冒号可能是多余的。因此,您可以将其用作测量杆。
答案 3 :(得分:0)
用分号标记Java编译器的语句结尾,在本例中为对象构造函数。
上面的OnClickListener代码是一个对象。该对象包含声明,实例化和初始化。需要建立整个对象构造函数的结束。
这是一个示例对象构造函数。
Example myobj = new Example();
哪个会看
public Example()
{
...
}
更多示例和扩展信息可以在Oracle Creating Objects的官方Java文档中找到。
您的代码是一个构造函数,它具有内联初始化类,而不是像上面的示例那样调用外部类。下面是没有内联初始化类的对象构造函数的示例。
View.OnClickListener listener = new View.OnClickListener();
这是你的构造函数。
View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { ... } };