我知道,finally語句中的跳轉語句不應該被使用。在這個簡單的例子中,'break'用來打破'switch'。 SonarQube(5.6.3)與 聲納的Java 4.5.0.8398報告的一個問題:SonarQube,在finally塊中跳轉語句(squid:S1143)
終於 「跳轉語句不應該發生 」「 塊(魷魚:S1143)」
public static void breakInFinallyIssue(){
int a = 0;
try{
a = 1/0;
}catch(Exception x){
System.out.println("div by zero");
}
finally{
switch (a) {
case 0:
//do something
break;
default:
break;
}
//do something more
}
}
這是一個已知的FP/bug?
'finally'用於清理。看起來你已經有太多的事情要做了。 –
感謝您的回答。有時需要清理很多東西。你認爲這會讓代碼過於複雜,無法通過聲納進行更深入的分析?那麼它可能是一個錯誤。即使這個小例子也會導致聲納報告問題。看起來,finally塊中的任何「中斷」事件,即使它不會導致跳轉到塊外的某處,都會導致該問題。 – Tester
我認爲'finally'中的'switch'存在一個代碼味道,很容易就會產生一個bug,是的。這是否是一個錯誤?不,但你爲什麼需要它? –