异常
异常体系结构
注意:所有异常的共同父类java.lang包下的Throwable类
这个Throwable类又分为两个分支
-
Error(程序无法处理的错误)
表示的是不希望被程序捕获或者程序无法处理的错误,这个Error类的对象一般由Java虚拟机生成并抛出,大多数错误与代码的编写和执行的操作无关,就比如VirtualMachineError(虚拟机错误)中的OutOfMemoryError错误,是由于内存不足而无法分配对象产生的错误,这些异常发生的时候,JVM一般都选择线程终止。
-
Exception(程序可以处理的错误)
这个Exception又分为两大分支
-
RuntimeException(运行时异常)
可以选择捕获处理,也可以不选择捕获处理,一般是由于程序的逻辑错误引起的
我们常见的就有
ArithmeticException 算数异常
NullPointException 空指针异常
ArrayIndexOutOfBoundsException 下标越界 -
非运行时异常
必须得捕获处理,不进行捕获处理编译就不会通过
就是除了RuntimeException及其子类之外,其他的Exception类及其子类都属于这种异常,如IOException
-
一图胜千言!
关于throw和throws
-
throws:声明一个方法可能产生的所有异常,不做任何处理,只是将异常向上传递,谁调用我我就抛给谁
方法名后面,跟的是异常类名
-
throw:抛出一个具体的异常类型
用在方法内,后面跟异常的具体对象
自定义异常
public class MyException extends Exception {
public MyException(){
}
public MyException(String errmsg){
super(errmsg);
}
}
测试:
class Solution{
public static void main(String[] args) throws MyException {
Solution solution = new Solution();
solution.check(101);
}
public void check(int score) throws MyException {
if (score > 100 || score < 0){
throw new MyException("分数输入异常");
}
}
}
输出结果:
Exception in thread "main" MyException: 分数输入异常
at Solution.check(Solution.java:10)
at Solution.main(Solution.java:5)