在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
包装抛出的自定义异常,但对于一般异常,我不必这样做?与示例中一样,myException
子类:
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子句,如中所述 指定方法引发的异常
请参阅Java教程中的内容。如果它扩展了
RuntimeException
,则不需要捕获,但可以自由捕获。啊,我想你已经猜到提问者的问题了。。。我关注的是“为什么它让我捕捉到自己的异常”问题,而不是检查与未检查之间的区别。