我们什么时候需要在大括号后面加分号?即:“};”

时间:2016-12-19 20:07:52

标签: java android

在Java中,分号仅用于数组和枚举的大括号。 但我发现它在Android编码方面有所不同。例如,为什么在以下代码中} 之后会出现;

Thread myThread=new Thread(){
    @Override
    public void run(){
        // something
    }
};

4 个答案:

答案 0 :(得分:1)

  

“匿名类使您能够使代码更简洁。它们使您能够同时声明和实例化类。它们就像本地类,除了它们没有名称。如果您需要使用它们,请使用它们本地班只有一次。“

Java - Anonymous Classes

而不是做这样的事情:

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(); };

所有这些示例的共同点是,花括号是表达式的一部分,即它们是代码,其结果是可以将值赋给变量,作为参数传递等。包含这些表达式的语句要求分号末尾,表达式是否以右大括号结尾; 语句需要分号,而不是构成该语句一部分的表达式。