簡體   English   中英

java只是花括號

[英]java just curly braces

我正在讀一本書,有一些程序示例只有花括號

例如

 public static void main(String args[]){
     //what is the uses of curly braces here.
     {
          //some code
     }
 }

這是一個代碼塊。 在那里聲明的變量在上塊(這些卷曲之外的方法體)中是不可見的,即它們的范圍更有限。

小心,它並不總是像其他人建議的那樣是一個初始化塊。 在您的情況下,它是一種稱為代碼塊或塊的可變范圍機制。

如果它在方法之外,那么它就是!

示例

public class MyClass {

   {
      // this is an initialisation block
   }

}

但是,如果它在方法內部,則不是! 在這種情況下(在您的示例中就是這種情況),它是一個代碼塊。 在花括號內初始化的任何東西在外面都是不可見的

示例

public static void main(String args[]){

     {
          String myString = "you can't see me!";
     }
     System.out.println(myString); // this will not compile because myString is not visible.
 }

如何使用花括號作為編碼結構的想法在 Java 世界中是一個有爭議的問題。 人們在自己看到花括號時會想到幾種解釋。 所以我會嘗試從實際的角度來回答你的問題。

您在這里的帖子中隱含的問題是,真的 - 何時/為什么使用這些? 實際上,以下情況可能會導致一個單獨的代碼塊:

1) 為了清楚起見,程序員想要額外的作用域來重用變量名而不必擔心沖突(即在單元測試或數據庫插入塊中創建多個相同類型的對象)。

其他可能的原因:

2) 忘記了正在開發的 if/else/for/while 循環代碼。

3) 刪除的 if/else/for/while 子句的剩余工件。

4) 自動生成的代碼使用范圍來簡化多個具有相同變量名稱的類似組件的創建(即考慮需要為 100 個單選按鈕制作代碼的 gui 生成器 - 而不是每個按鈕增加變量名稱,它可以使用范圍)。

5) 作為一個微小的、可重用的、可粘貼的具有最小副作用的邏輯塊:程序員覺得方法中的代碼塊是如此晦澀,它的變量和內部副作用應該對外界的可見性最小。 也就是說,程序員將代碼塊用作窮人的匿名 lambda 函數(盡管沒有返回值)。 在這種模式中,人們可能會做一些類似於以下的事情:

//lets say I want to make a primary key for a dogs name in a database. 
String dogNameKey=null;
{
    long time = System.currentTimeInMilliseconds();
    String theName = "spot";
    dogName=theName+"_"+time;
}

顯然,命名這條記錄的簡單策略(dogNameKey)配不上外部方法——它太簡單了。 但與此同時,“時間”變量不應在構成此名稱的邏輯之外沒有任何意義或可訪問性 - 即它甚至不應該與包含這個小密鑰生成塊的方法相關。 所以,通過使用大括號,我已經確定了它的范圍。 如果可以使用 labmda,那么所有這些作用域都可以包含在一個匿名函數中。

現在 - 我可以粘貼這些塊中的幾個,並且變量名稱將是相同的,因此很容易通過肉眼掃描它們。

*因此,當您單獨看到花括號時 - 它們通常非常重要 - 它們要么實現特定的自定義范圍,要么是錯誤或潛在的自動生成代碼的產物。 作用域也可用於“開始”重構方法,而無需實際編寫新方法,通過分離其獨立部分……盡管 IDE 在這方面比人類要好得多。 *

它被稱為

塊是大括號內的語句序列、局部類聲明和局部變量聲明語句。

另見:

在某些情況下,您可以通過這種方式在邏輯上分離您的代碼,事實上,我經常使用一個用例:演示數據。 例如,您有一些演示數據生成類,用於創建演示數據條目並插入到您的數據庫中。 您將每個單個項目放在這樣的塊中,並且可以在不更改變量名稱的情況下進行復制粘貼。

暫無
暫無

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

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