jls - Why do try/catch or synchronized in Java require a statement block? -
java allows keywords followed statement or statement block. example:
if (true) system.out.println("true"); system.out.println("true"); while (true);
compiles as
if(true) { system.out.println("true"); } { system.out.println("true"); } while (true);
this true keywords for
, while
etc.
however, keywords don't allow this. synchronized
requires block statement. same try ... catch ... finally
, requires @ least 2 block statements following keywords. example:
try { system.out.println("try"); } { system.out.println("finally"); } synchronized(this) { system.out.println("synchronized"); }
works, following doesn't compile:
try system.out.println("try"); system.out.println("finally"); synchronized (this) system.out.println("synchronized");
so why keywords in java require block statement, while others allow block statement single statement? inconsistency in language design, or there reason this?
you dangling else-like ambiguity if try allow leaving out braces. whilst solved in similar fashion dangling-else, best not to.
consider
try try fn(); catch (gexception exc) g(); catch (hexception exc) h(); catch (iexception exc) i();
does mean
try try fn(); catch (gexception exc) g(); catch (hexception exc) h(); catch (iexception exc) i();
or
try try fn(); catch (gexception exc) g(); catch (hexception exc) h(); catch (iexception exc) i();
i believe in clu, catch blocks around 1 statement (may wrong).
Comments
Post a Comment