Java 在相应的try语句体中从不抛出异常
我在Java中遇到异常处理问题,下面是我的代码。当我试图运行这一行时,我遇到了编译器错误:Java 在相应的try语句体中从不抛出异常,java,exception,Java,Exception,我在Java中遇到异常处理问题,下面是我的代码。当我试图运行这一行时,我遇到了编译器错误:抛出新的MojException(“Bledne dane”)。错误是: 在相应的try语句体中从不抛出异常MojException 代码如下: public class Test { public static void main(String[] args) throws MojException { // TODO Auto-generated method stub for(i
抛出新的MojException(“Bledne dane”)代码>。错误是:
在相应的try语句体中从不抛出异常MojException
代码如下:
public class Test {
public static void main(String[] args) throws MojException {
// TODO Auto-generated method stub
for(int i=1;i<args.length;i++){
try{
Integer.parseInt(args[i-1]);
}
catch(MojException e){
throw new MojException("Bledne dane");
}
try{
WierszTrojkataPascala a = new WierszTrojkataPascala(Integer.parseInt(args[0]));
System.out.println(args[i]+" : "+a.wspolczynnik(Integer.parseInt(args[i])));
}
catch(MojException e){
throw new MojException(args[i]+" "+e.getMessage());
}
}
}
}
有人能帮我吗?正如评论中指出的那样,您无法捕获不是由try
块中的代码引发的异常。尝试将代码更改为:
try{
Integer.parseInt(args[i-1]); // this only throws a NumberFormatException
}
catch(NumberFormatException e){
throw new MojException("Bledne dane");
}
始终检查以查看每个方法引发的异常。您可能还希望在这会在将来引起任何混乱之前阅读一下的主题。try语句中的catch块需要准确地捕捉,try{}
-block中的代码可以抛出的异常(或该异常的超类)
您试图做的是:
try {
throw new ExceptionB("I am Exception Bravo!");
}
catch(ExceptionA e) {
System.out.println("Message: " + e.getMessage());
}
这将导致编译器错误,因为java知道您正在尝试捕获一个永远不会发生的异常。因此,您将得到:异常exception从不在相应的try语句体中抛出
请记住,在检查异常的情况下,只有在抛出异常后才能捕获(抛出异常或代码中使用的任何内置方法都可以抛出异常),但是在未检查异常的情况下,即使您没有抛出该异常,您也会捕获一个异常。任何扩展异常的类都将是用户定义的检查异常类,其中扩展RuntimeException
的任何类都将是未检查异常类。
如中所述
因此,不抛出选中的异常(无论是用户定义的还是内置的异常)会导致编译时错误
检查的异常是在编译时检查的异常
未检查的异常是在编译时未检查的异常编译器错误是什么?好吧,MojException
不会从Integer.parseInt
…总是,总是告诉我们错误是什么,而不仅仅是您得到了一个。异常MojException永远不会被抛出到相应的try语句体中-下面是错误消息。延迟回答。。。扩展运行时异常。。。不是异常..好的,现在它工作了,但是我仍然没有从那个异常中得到我想要的消息(Bledne dane),现在我得到了正常的异常消息(线程“main”java.lang的异常…@user3407967你能发布你的整个异常消息吗?E:\workspace\pascal1\src\pascal1>java Test 8线程“main”中的异常java.lang.NumberFormatException:对于输入字符串,在java.lang.NumberFormatException.forInputString(未知源)在java.lang.Integer.parseInt(未知源)在java.lang.Integer.parseInt(未知源)在Test.main(Test.java:14)@user3407967该异常在第14行抛出,该行位于您的第二个try块中。您必须调整catch
子句的异常消息。您必须将所有内容包装在另一个try-catch块中才能正常工作。但老实说,这将是非常难看的代码。我认为您必须更熟悉exc的基本概念首先是eption处理!您在这里尝试的是抛出一个异常来抛出另一个异常。通常这不是必需的,也不会产生好的代码。根据您的解释,此代码也会抛出错误,但编译良好。您能解释一下原因吗?导入java.io.*;类a{public static void main(String[]args{try{new a().go();}catch(Exception e){System.out.println(“error”);}}}void go(){}我现在手头上没有IDE,但我假设由于` Exception`是已检查和未检查异常的超类,它将编译。例如,一个空指针异常(它是未检查的异常,是异常的子类)基本上可以扔到任何地方,这样代码就可以编译了…你的剪贴真是太棒了-是的,这正是我想写的!准确地说,我的例外a
是中断异常
,它显然从未在代码中写入,而是从其他线程引发的。我如何捕获中断异常
?@TheGo答:我想这个回答了你的问题->
try {
//do something that throws ExceptionA, e.g.
throw new ExceptionA("I am Exception Alpha!");
}
catch(ExceptionA e) {
//do something to handle the exception, e.g.
System.out.println("Message: " + e.getMessage());
}
try {
throw new ExceptionB("I am Exception Bravo!");
}
catch(ExceptionA e) {
System.out.println("Message: " + e.getMessage());
}