2011-12-06 10 views
-1

我在看這段代碼,它看起來像:在java中調用的這種語法風格是什麼?似乎是在做事情直列

blah("...."); 
{ 
    call1(blah); 

    call2(); 
    { 
     inner1("..."); 
     inner2("..."); 
    } 

} 

我是新來的Java這麼有興趣知道要搜索什麼,這種風格看起來很有趣。

+0

具體是什麼你指的是風格? – BVSmallman

+0

爲什麼在'call2()'下面有一段代碼? – Paul

+0

呃,你特別注意到這個「風格」?大括號的位置?缺乏駱駝名稱?還有其他的東西嗎?請澄清你正在尋找什麼。 – paulsm4

回答

5

這不是在做內聯,它只是設置一個單獨的範圍。如果您在該「內部」塊中聲明變量,則它們將不在外部塊中可用。如果您複製粘貼幾行代碼,並希望確保不重複使用第二位中第一位的變量,這會非常有用。我偶爾在單元測試中做過,但通常情況下,這是一個跡象表明您可能需要重構一下。

+0

+1實際解釋它的功能 –

0

它只是一個包含一組語句的塊,沒有什麼特別的,儘管有時可以限制變量(a)的範圍。你可以做同樣的事情在C如:

int main (void) { 
    int i; 
    { 
     i = 1; 
    } 
    return 0; 
} 

(一):變量聲明這樣的塊是不是塊的外部可見的,所以是這樣的:

{ 
    int i = 1; 
} 
System.out.println (i); 

將不會有效,因爲i在結束大括號處「消失」。

0

它被稱爲「使用不必要的塊」。

唯一的好處是確保沒有變量被陰影。

IMO它幾乎總是噪音,很少見到它。 (閱讀:本質上從來沒有,在數百萬行代碼的超過12年以上當我做它在不成熟的代碼。)

我不會推薦它作爲一個普通的事情。

+0

+1簡短,準確和有趣。 – Jon

+1

雖然這個特定的_example_是不必要的,但這個想法本身有時對於限制變量的持續時間/可見性有用。 – paxdiablo

+0

@paxdiablo同意,但仍然幾乎沒有必要。 –

0

這只是一個block,這是一串用大括號括起來的陳述。您可能習慣將它們視爲if聲明的主體,但也許您從來沒有這樣想過它們。

if (foo) { bar; } 

我還沒有看到有額外塊寫很多代碼,雖然我有時想,如果它會利用它們來表示(例如)特別長,冗長的UI代碼段非常有用。我在看到他們偶爾在OpenGL代碼中使用,使glBegin和glEnd語句脫穎而出。

glBegin(GL_LINES); 
{ 
    .. draw a bunch of primitives .. 
} 
glEnd(); 

也有可能是要利用它們來限制某些變量的範圍極少數情況下,因爲變量只作用域他們在那裏宣佈塊。

4

這只是一個本地範圍。您可以在覈心內容中引入範圍。

void foo() 
{ 
    int a; 

    { 
    int b = get(); 
    bar(a, b); 
    } 

    { 
    int b = get(); 
    bar(a, b); 
    } 

} 

每個變量只在其範圍內可見,所以你可以用它來保持名稱空間的清潔。在上面的例子中,如果沒有本地範圍,我將必須有一個b的聲明,然後重複分配。由於不同的範圍,我可以複製/粘貼整個塊,並且我永遠不會將名稱b泄漏到更大的範圍內,所以我不必擔心它。

0

這是沒有意義在你的榜樣(也許除了邏輯分組),但你可以使用這些模塊得到「更多的本地」變量(這樣就可以重複使用的名稱):

{ 
    String x = "zzzz"; 
    String y = doSomething(x); 
    doSomethingElse(y); 
    } 
    { 
    int x = 12; 
    long y = foo(x); 
    bar(y); 
    } 
相關問題