簡體   English   中英

我們什么時候需要在大括號后面加分號? IE: ”};”

[英]When do we need to put semicolon after curly brackets? i.e.: “};”

在 Java 中,分號僅用於數組和枚舉的大括號之后。 但我發現它在 Android 編碼中有所不同。 例如為什么有一個; }在以下代碼中:

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

"匿名類使您的代碼更加簡潔。它們使您能夠同時聲明和實例化一個類。它們類似於本地類,只是它們沒有名稱。如果您需要使用本地類,請使用它們只有一次。”

Java - 匿名類

而不是做這樣的事情:

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

您可以使用匿名類以其他方式對代碼進行排序。

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

要以最通用的方式回答您的問題,當大括號是表達式的一部分時,右大括號后面需要一個分號,並且該表達式出現在通常以分號結尾的語句的末尾

在您的示例中,右大括號是類實例創建表達式的一部分,用於變量聲明語句。 變量聲明語句總是以分號結尾,而不管初始化表達式是否恰好以右花括號結尾。

另一個例子是數組初始值設定項表達式

int[] nums = new int[] { 1, 2, 3 };

第三個例子是一個lambda 表達式

Function<String, Integer> lengthGetter = s -> { return s.length(); };

所有這些例子的共同點是大括號是表達式的一部分,即它們是產生可以分配給變量、作為參數傳遞等的值的代碼。包含這些表達式的語句需要在end,表達式是否以右大括號結尾; 需要分號的是語句,而不是構成該語句一部分的表達式。

這是一個匿名類的書籍示例,它又需要一個分號,因為您實際上仍在實例化 Thread 類。

因為代碼仍然是variable = statement;的形式variable = statement;

代碼塊本質上是擴展Thread類並制作一個內聯匿名類。

由於這是 Android,我假設您在某個時候new View.OnClickListener() {}了一個new View.OnClickListener() {} ,對嗎?

同樣的想法。 將偵聽器移出setOnClickListener方法。

View.OnClickListener click = new View.OnClickListener() {
    @Override 
    public void onClick(View v) {  }
}; // <-- semi-colon

button.setOnClickListener(click);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM