自定义异常实例
定义一个年龄范围超出异常如下:
public class Demo {
public static void main(String[] args) {
//可以手动捕获异常
try {
AGE.checkAge(17);
} catch (ageException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
//创建自定义的ageException
class ageException extends Exception{
public ageException(String message) {
super(message);
}
}
//可以创建一个年龄类
final class AGE{
//定义方法检验年龄是否异常
public static void checkAge(int age) throws ageException{
if(!(age>=18&&age<=120)){
throw new ageException("年龄设置异常");//抛出异常
}
System.out.println("年龄范围正常");
}
}
如果将异常定义为Exception
也就是编译异常,编译异常是一定要事先处理的(无论是采用try...catch还是throws)。
我们看到checkAge方法内部肯定是有一个throw的动作抛向checkAge,那么没办法,checkAge
只能继续向上throws 到调用checkAge的main方法
1.如果这时候不对main方法中的checkAge方法采取try...catch捕获ageException异常,main方法就会继续向上throws到调用main方法的JVM,最后由JVM捕获并打印出异常
2.如果这时候采取try...catch捕获ageException异常,则直接捕获异常,程序捕获后继续向下运行
如果将异常定义为RuntimeException
也就是运行时异常,运行时异常是不需要事先处理的
尽管checkAge方法内部肯定是有一个throw的动作,但向上throw和try...catch 都不是必须的