【发布时间】:2010-05-06 14:30:34
【问题描述】:
我有一个异常链,其中method1 向method2 抛出异常,而main 又向main 抛出异常。出于某种原因,编译器强迫我处理method2 中的错误,如果我不这样做,则将其标记为错误,表明这是一个已检查的异常。但是当同样的Exception 被进一步抛出到main 时,编译器允许我忽略它并且不显示任何错误。
method1 中的原始异常是 ParseException,已检查。但是该方法在标头中有一个通用的throws Exception 子句,并且将相同的对象抛出给具有相同throws Exception 子句的method2。这个异常何时以及如何失去被编译器检查/捕获的状态?
编辑澄清:
public void method1() throws Exception{
// code that may generate ParseException
}
public void method2() throws Exception{
method1(); //compiler error (if the throws clause is left out)
}
public static void main(String[] args){
method2(); //ignored by compiler, even though the exception isn't caught or thrown or handled at all
}
编辑:
对不起大家,这个问题是基于一个错误......主要方法实际上有一个我错过的throws Exception子句。我已经删除了它,代码现在按预期运行。感谢大家的帮助!
【问题讨论】:
-
你能澄清一下吗? method1 是否抛出“ParseException”,被 method2 和 main 视为“异常”?一些方法签名和 try-catch-throw 代码 sn-ps 会有所帮助。
-
ParseException 是自定义类吗?如果是这样,您是否也可以将其添加到您的示例代码中?
-
您发布的代码不会按照编写的方式编译,因为 method1() 和 method2() 都需要是静态的才能被 main 调用。一旦将它们设为静态,编译错误就会出现在 main 中,因为它不处理或抛出检查的异常。
-
@ColinD - 是的,这段代码并不完全准确,只是想给出一个大致的想法。 method1 和 method2 实际上是对象方法,main 实例化一个对象并从该对象中调用它们
-
@Jarle Hansen - ParseException 不是自定义类。您可以查看 javadoc:java.sun.com/javase/6/docs/api/java/text/ParseException.html。当在
Format上调用parse时,它经常被抛出。例如,请参阅DateFormat.parse(String)
标签: java exception runtime checked-exceptions