为何使用;之后}和})

时间:2017-05-20 23:35:32

标签: java syntax

更新:之前没有想象它,但现在我可以!谢谢!保留这个问题以防万一有人犯了同样的错误......

ORIGINAL:

我在java中相当生疏。我注意到在实例化View.OnClickListener对象后,我不得不在}之后添加分号。我也在})之后看过分号。

为什么在;}之后有})

这是我正在查看的代码:

View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    ...
    }
};

4 个答案:

答案 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) { ... } };