Why do I need to wrap my thrown custom exceptions with try/catch whilst trying to throw them, but I don't have to do that for generic exceptions? Like in the example, my Exception subclass :
public class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
}
Throwing exceptions :
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();
}
}
}
}
解决方案
UnsupportedAddressTypeException is a subclass of RuntimeException, and from the JavaDoc:
RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.