class HelloWorld extends Exception {
HelloWorld(String s) {
System.out.println("helllo" + s);
}
}
class myclass {
void go() throws HelloWorld {
System.out.println("my mom");
}
}
public class ting {
public static void main(String[] args) {
try {
myclass h= new myclass();
h.go();
} catch(HelloWorld e) {
throw new HelloWorld("world");
}
}
}
我读到这一点,我们总是需要声明一个异常,直到我们抓住它。如上所述,我使用自定义异常HelloWorld
,当我将此异常抛出到其他类,即myclass.Moreover时,我在main方法中捕获了此异常。为什么它不起作用?
o/p : ting.java:17: error: unreported exception HelloWorld; must be caught or declared to be thrown
throw new HelloWorld("world");
^
1 error
答案 0 :(得分:1)
出于某种原因,您正在从catch
块中抛出异常。
解决方案:
声明您的main
为throws HelloWorld
:
public static void main(String[] args) throws HelloWorld
再次使用try-catch
围绕它,但那会非常奇怪:
catch(HelloWorld e){
try {
throw new HelloWorld("world");
} catch (HelloWorld e1) { }
}
}
注意:您最好为例外 HelloWorldExcption
命名。
答案 1 :(得分:1)
在我看来,你似乎没有完全掌握试图完成的异常,或者我完全不理解你将代码抽象到这个例子中的方式。
我将尝试创建一个类似的示例,该示例应解释大多数情况下如何使用异常:
public class MyClass {
class UnexpectedException extends Exception {
UnexpectedException(String msg) {
super(msg);
}
}
public static void main(String[] args) {
MyClass c = new MyClass();
try {
System.out.println(c.computeMessage());
} catch (UnexpectedException e) {
System.err.println("Something unexpected happened: " + e.getMessage());
}
}
public String computeMessage() throws UnexpectedException {
// Try to compute a message here, but something goes wrong so:
throw new UnexpectedException("Oh no, could not compute the message!");
}
}
当异常发生时抛出异常,并且为了通知程序员可能发生异常情况,方法声明可以声明它们可能抛出某个异常。
然后,程序员可以“捕获”潜在抛出的异常,以便在发生异常的特殊情况下提供调试或恢复代码。我希望这可以澄清什么是例外,以及如何使用它们。如果您有更多问题,请与我们联系。
编辑:要解决您遇到的错误,如果将行throw new HelloWorld("world")
从catch块移到go方法,那么您的示例应该可以正常工作。
答案 2 :(得分:0)
您已经捕获HelloWorld
方法声明为可抛出的go()
异常。在大多数情况下,你不想抓住它并重新抛出它。您可以声明main()抛出异常,而不是捕获go()
引发的异常,而不必捕获它 - 尽管这不是一个好习惯。此外,应该命名例外:
HelloWorldException
而不是:HelloWorld
。