在eclipse中編寫例如以下的代碼,eclipse會給出黃色告警:finally block does not complete normally。
public class Test
{
public static void main(String[] args)
{
System.out.println(m1(null));
}
public static String m1(String name)
{
try
{
name.length();
}
finally
{
return name + "_test";
}
}
}
這段代碼執行結果是:控制台打印null_test。不會拋出空指針異常(被JVM吞掉了)。
程序出現了同意異常,可是卻被JVM私吞,顯然這是不好的做法。不建議在finally塊中使用return語句的原因例如以下:
1、finally塊中的return語句會覆蓋前面的return語句(try塊、catch塊中的return語句)。會導致非常難推斷方法的返回結果,easy得出錯誤的結論。
2、假設finally塊中包括了return語句,即使前面的try或catch塊拋出了異常,則調用該方法的語句也不會獲得catch塊又一次拋出的異常。而是會得到finally塊的返回值。而且不會捕獲異常。
總之在finally中使用return是不好的編程實踐,應該避免使用。關於try-catch-finally中使用return的返回值問題,能夠看下http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html這篇博客。列舉了非常多種情況,分析也非常具體。就算是有經驗的程序猿。也可能會錯誤地推斷方法返回結果,不信你能夠去試試。
