Java如何从try,catch和最后返回一个值?
因此,当我在“try {}”中执行块代码时,我尝试返回一个值,它会出现“无返回值”。 这是我使用的代码,代表我的问题。
import org.w3c.dom.ranges.RangeException; public class Pg257E5 { public static void main(String[]args) { try { System.out.println(add(args)); } catch(RangeException e) { e.printStackTrace(); } finally { System.out.println("Thanks for using the program kiddo!"); } } public static double add(String[] values) // shows a commpile error here that I don't have a return value { try { int length = values.length; double arrayValues[] = new double[length]; double sum =0; for(int i = 0; i<length; i++) { arrayValues[i] = Double.parseDouble(values[i]); sum += arrayValues[i]; } return sum; // I do have a return value here. Is it because if the an exception occurs the codes in try stops and doesn't get to the return value? } catch(NumberFormatException e) { e.printStackTrace(); } catch(RangeException e) { throw e; } finally { System.out.println("Thank you for using the program!");// so would I need to put a return value of type double here? } } }
基本上,我遇到的问题是“当你使用try和catch块时,你如何返回一个值?
要在使用try/catch
时返回值,可以使用临时变量,例如
public static double add(String[] values) { double sum = 0.0; try { int length = values.length; double arrayValues[] = new double[length]; for(int i = 0; i < length; i++) { arrayValues[i] = Double.parseDouble(values[i]); sum += arrayValues[i]; } } catch(NumberFormatException e) { e.printStackTrace(); } catch(RangeException e) { throw e; } finally { System.out.println("Thank you for using the program!"); } return sum; }
否则,您需要在没有throw
每个执行路径(try block或catch block)中返回。
这是因为你是一个try
语句。 由于可能存在错误,因此可能无法初始化sum,因此将return语句放在finally
块中,这样肯定会返回。
确保在try/catch/finally
之外初始化sum以使其在范围内。
问题是当你抛出NumberFormatexception
时会发生什么? 你打印它并且什么也不返回。
注意:您不需要捕获并抛出exception。 通常用它来包装它或打印堆栈跟踪并忽略例如。
catch(RangeException e) { throw e; }
这是另一个使用try / catch返回布尔值的示例。
private boolean doSomeThing(int index){ try { if(index%2==0) return true; } catch (Exception e) { System.out.println(e.getMessage()); }finally { System.out.println("Finally!!! ;) "); } return false; }