Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在相应的try语句体中从不抛出异常_Java_Exception - Fatal编程技术网

Java 在相应的try语句体中从不抛出异常

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

我在Java中遇到异常处理问题,下面是我的代码。当我试图运行这一行时,我遇到了编译器错误:
抛出新的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());
}