老祖是Throwable 有exception和error两个子类
error表示严重问题不需要处理,exception便是程序本身可以处理的问题
exception有RuntimeException和非RuntimeException两个子类
异常类和不是RuntimeException的子类的任何子类都是检查异常
RuntimeException是在Java虚拟机的正常操作期间可以抛出的异常的超类
它和它的子类都是未检查的异常,编译期间不需要检查(编译期间不会告诉你有错误),运行出错,出现问题后需要我们回来修改代码
非RuntimeException:编译期间就必须处理,否则程序不能通过编译,就更不能正常运行了
异常处理:
如果程序出现了问题,我们需要自己来处理,有两种方案:
- try...catch...
- throws
第一种:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}
例如
try{
int[] arr={1,2,3,4};
System.out.println(arr[4]);
}catch(ArrayIndexOutOfBoundsException m){
System.out.println("你输入的数组索引不存在");
}
Throwable的成员方法:
public String getMessage() 返回此throwable的详细消息字符串
public String toString() 返回此可抛出的简短描述
public void printStackTrace() 把异常的错误信息输出在控制台
throws处理异常
格式:
throws 异常类名;//这个格式是跟在方法的括号后面的
将异常抛出去,并没有做实际的处理还得通过try catch实现
自定义异常:
只要我们的类继承自Exception或者RuntimeException那么它就变成了异常体系中的一员
格式:
public class 异常类名 extends Exception{
无参构造
带参构造
}
throw和throws的区别
前者
用在方法体内,跟的是异常对象名
表示抛出异常,由方法体内的语句处理
执行throw一定抛出了某种异常
后者
用在方法声明后面,跟的是异常类名
表示抛出异常,由该方法的调用者来处理
表示出现异常的一种可能性,并不一定会发生这种异常