在Java中抛出自定义异常

在Java中抛出自定义异常,java,Java,为什么在尝试抛出自定义异常时,我需要用try/catch包装抛出的自定义异常,但对于一般异常,我不必这样做?与示例中一样,myException子类: public class MyException extends Exception { public MyException(String msg) { super(msg); } } 引发异常: public class Exe { private static void testex(String

为什么在尝试抛出自定义异常时,我需要用
try
/
catch
包装抛出的自定义异常,但对于一般异常,我不必这样做?与示例中一样,my
Exception
子类:

public class MyException extends Exception {
    public MyException(String msg) {
        super(msg);
    }
}
引发异常:

public class Exe {

    private static void testex(String test) {
        if (null!=test) {
            throw new UnsupportedAddressTypeException();
        } else {//Removing try/catch block results in compile failure
          try {
            throw new MyException("message");
          } catch (MyException e) {
            e.printStackTrace();
          }
        }
    }
}

您的静态方法应该声明

private static void testex(String test) throws MyException

如果您希望方法抛出它(而不是在内部捕获和处理它)。

如果您的异常扩展了java.lang.exception,则必须捕获它(或重新抛出)。如果它扩展了java.lang.RuntimeException,则不需要这样做。您会发现,对于所有标准异常,这也是正确的


编辑将单词不得更改为不需要

不支持DressTypeException是RuntimeException的一个子类,来自JavaDoc:

RuntimeException是Java虚拟机正常运行期间可以抛出的异常的超类

方法不需要在其throws子句中声明在方法执行期间可能抛出但未捕获的RuntimeException的任何子类

从:

有效的Java编程语言代码必须遵守Catch或Specify 要求这意味着可能引发某些异常的代码 必须随附以下任何一项:

  • 捕获异常的try语句。try必须为异常提供处理程序,如捕获和处理中所述 例外情况

  • 指定可以引发异常的方法。该方法必须提供一个列出异常的throws子句,如中所述 指定方法引发的异常

未能遵守捕获或指定要求的代码将不会被删除 编译。 并非所有例外情况都符合Catch或Specify要求

[……]

运行时异常不受Catch或Specify要求的约束。运行时异常是由RuntimeException及其子类指示的异常


请参阅Java教程中的内容。如果它扩展了
RuntimeException
,则不需要捕获,但可以自由捕获。啊,我想你已经猜到提问者的问题了。。。我关注的是“为什么它让我捕捉到自己的异常”问题,而不是检查与未检查之间的区别。