2012-07-25 215 views
0

当一个方法抛出和异常,我们是否需要在该方法内有一个try块?投掷Java异常

例如,

public void foo() throws SomeException{ 
     try{ 
      // content of method 
     } 
    } 

是try块所需?或者说,是能够抛出SomeException没有它的方法:

public void foo() throws SomeException{ 
      // content of method 
    } 

这样的话,当我们明确地抛出一个SomeException与

回答

3

如果SomeException检查的异常必须要么

  • 使用try{}catch
  • 宣告你的方法把它扔了。

你不必同时做这两件事,你在问题中展示的例子都可以正常工作。

不同的是,与try子句通过声明自己处理SomeException,而你自己的方法throws它,你委托的处理SomeException调用方法的责任。

0

当一个方法抛出一个异常时,它负责处理其调用者的异常。 所以你不需要处理异常,如果你把它放在签名中。如下所示。

public void foo(){ 
     try{ 
      // content of method 
     } 
    } 

但是如果你这样写的话。

public void foo() throws SomeException{ 

    } 

你会打电话给你的方法,如下所示。

try{ 

    foo(); 
} 
0

如果我们从程序throws an Exception打电话,那么我们就需要使用try/catch周围的方法调用的方法。

2.假设我们正在编写throws an exception那么我们就需要throw new Exception object从withing方法的方法。

3.异常是异常类型为的对象。我们有Checked ExceptionUnchecked Exception (Runtime Exception)

0

你不需要try块。

public void foo() throws SomeException { 
    // do some stuff 
    // you decide to throw the exception by yourself: 
    if (throwAnException) throw new SomeException(); 
    // or you call a method that throws SomeExpection: 
    methodThatCanThrowSomeException(); 
    // do more stuff 
} 

只要你在你的签名中声明它,你完全没问题。你的方法的调用者必须处理这个异常,而不是你。所以一个来电者可能会这样做:

try { 
    foo(); 
} catch (SomeException e) { 
    // handle exception 
} 

或者他可能会进一步通过它自己。

0

您经常遇到的问题最多的情况是调用一个声明检查异常的方法。在绝大多数实际案例中,不适合在现场处理该异常,但让它向上传播。不幸的是,Java会让你重新声明这个相同的异常,这会造成混乱,暴露实现细节,并且经常会打破现有方法的契约。

在这种情况下进行的方式是包装和重新抛出

catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);} 
+0

那不是他问,但这是一个非常有趣的技术。谢谢 ;) – brimborium 2012-07-25 10:17:44

0

你没有本质上需要有一个try块在它

​​