2011-09-14 15 views
1

我所經歷的一些Java教程一本書,跑過這樣的代碼:Java - 變量定義之後的大括號?

private void theMethod(MyObject table) 
{ 
    SomeObject item1 = table.add(0,0,0,"Item 1"); 
    { 
    item1.setWhatever = false; 
    item1.setSomething = 15; 
    } 

    // More code here... 
} 

什麼是以下變量定義的大括號的目的是什麼?

+0

我會檢查出書勘誤(可能在出版商網站上)。這很可能是一個錯誤,他們將有一個更新的例子。 – scrappedcola

+0

我懷疑這是勘誤。代碼沒有編程目的,但這並不意味着它是錯誤的。 – emory

回答

6

當我使用大量局部變量時,我有時在組中使用這些大括號。這樣,它們超出了範圍,我可以創建具有相同名稱的變量。

我不能馬上找到一個很好的例子,但我的意思是這樣:

/* Code block 0 */ 
{ 
    int localStuff = 9; 
    boolean submit = false; 
    // Do some IO, or whatever 
} 
/* Code block 1 */ 
{ 
    int localStuff = 4; 
    boolean submit = false; 
    // Do some IO, or whatever 
} 

/* Code block 2 */ 
{ 
    int localStuff = -1; 
    boolean submit = true; 
    // Do some IO, or whatever 
} 
+0

+1擊敗了我:P –

+2

dup代碼被發現,那麼在方法中包裝你的本地範圍呢? :p無論如何,+1 –

+0

@AurélienRibon - 不錯!成爲一名體面的程序員所需要的唯一天賦就是能夠找到模式並進行概括:-)不幸的是,大多數代碼看起來像這個例子...... – KarlP

0

這是正常的,該塊只是用來組織代碼,它評價爲正常流動

class Foo{ 
    private void theMethod(String str) 
    { 
     { 
     System.out.println(str); 
     {}{}{}{}{}{}{}{} 
     } 
    } 

    public static void main(String ...args){ 

     new Foo().theMethod("my string"); 
    } 
} 

與之相似的方式;

class Foo{ 
    private void theMethod(String str) 
    { 
     { 
     System.out.println(str); 
     {;}{;}{;}{;}{;}{;}{;}{;} 
     } 
    } 

    public static void main(String ...args){ 

     new Foo().theMethod("my string");;;;;;;;;;;;;;;;; 
    } 


} 
+1

我不會把給定的例子稱爲正常。這是一本書中的實際代碼片段。 – Robin

2

在這個特殊的例子,它不會做任何事情(也許只是提高了代碼的外觀的基礎上,編碼器的味道)。但是,它可能也是一個錯字:)

BTW,括號可用於限制範圍會有所幫助:

private void theMethod(MyObject table) 
{ 
    { 
    SomeObject item1 = table.add(0,0,0,"Item 1"); 
    item1.setWhatever = false; 
    item1.setSomething = 15; 
    } 
    // Item1 is not defined here anymore, so for example you can define another object with the name item1 
    // Though it's not a good practice. 
    OtherClass item1; 
    // More code here... 
} 
1

你肯定是這樣呢?儘管代碼塊可以像這樣定義,但它並沒有太大的作用,除非限制局部變量的範圍,這並不令人興奮。

然而,類級匿名代碼塊是有用的初始化變量,和填充數據結構等

例如,這種靜態的匿名塊初始化一個最終靜態變量。

public class Snippet { 

    private final static Map config; 
     static { 
      HashMap tmp = new HashMap(); 
      tmp.put("moo","foo"); 
      tmp.put("bar","baz"); 
      config = Collections.unmodifiableMap(tmp); 
      } 
    // rest of class here. 
    } 

它的工作原理INT以同樣的方式對非靜態塊和實例變量,如果你想確保所有構造函數和子類執行相同的代碼是用處不大,但方便。

我發現這個線程,它不是重複的,而是相關的。 Anonymous code blocks in Java

相關問題