Java中的匿名代碼塊Java中是否存在匿名代碼塊的實際用途?public static void main(String[] args) {
// in
{
// out
}}請注意,這不是關(guān)于命名塊,即name: {
if ( /* something */ )
break name;}
3 回答

慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
它們限制了變量范圍。
public void foo(){ { int i = 10; } System.out.println(i); // Won't compile.}
但實際上,如果你發(fā)現(xiàn)自己使用了這樣一個代碼塊,那可能就是你想要將那個塊重構(gòu)為一個方法的跡象。

心有法竹
TA貢獻1866條經(jīng)驗 獲得超5個贊
通常最好使局部變量的范圍盡可能小。匿名代碼塊可以幫助解決這個問題。
我發(fā)現(xiàn)這對switch
語句特別有用。考慮以下示例,沒有匿名代碼塊:
public String manipulate(Mode mode) { switch(mode) { case FOO: String result = foo(); tweak(result); return result; case BAR: String result = bar(); // Compiler error twiddle(result); return result; case BAZ: String rsult = bar(); // Whoops, typo! twang(result); // No compiler error return result; }}
并使用匿名代碼塊:
public String manipulate(Mode mode) { switch(mode) { case FOO: { String result = foo(); tweak(result); return result; } case BAR: { String result = bar(); // No compiler error twiddle(result); return result; } case BAZ: { String rsult = bar(); // Whoops, typo! twang(result); // Compiler error return result; } }}
我認(rèn)為第二個版本更清晰,更容易閱讀。并且,它減少了在切換到聲明它們的情況下聲明的變量的范圍,根據(jù)我的經(jīng)驗,這是你想要99%的時間。
但要注意,它并沒有改變案件掉落的行為 - 你仍然需要記住包括break
或return
防止它!
添加回答
舉報
0/150
提交
取消