首页 > 代码库 > 异常笔记补充
异常笔记补充
异常(Throwable)
1.异常定义:
生活中的异常——有异于常态,和正常情况不太一样,有错误出现。
Java中的异常——程序运行期间有可能出现的问题,阻止当前方法或作用域继续执行,即称之为异常。
2.分类:
(1)错误(Error):主要包括虚拟机错误(VirtualMachineError)和线程四锁(ThreadDeath),出现后程序彻底崩溃
(2)异常(Exception):主要包括非检查异常(RuntimeException)和检查异常。
非检查异常主要包括:空指针异常(NullPointerException),数组下标越界异常(ArrayIndexOutOfBoundsException),
类型转换异常(ClassCastException),算数异常(ArithmeticException)
——说明代码本身有问题,应从逻辑上对代码进行修改。
检查异常主要包括:文件异常(IOException),SQL异常(SQLException)
3.捕获异常
(1)try——catch的使用
try{
System.tou.println("请输入你的年龄:");
Scanner input = new Scanner(System.in);
int age = input.nextInt();
System.out.println("十年后你"+(age+10)+"岁");
}catch(InputMismatchException e){
System.out.println("你应该输入整数!!");
}
System.out.println("程序结束了");
try——catch块中的语句执行完后,会继续执行后面的语句。
(2)多重catch块的使用
Scanner input = new Scanner(System.in);
try{
System.out.println("请输入第一个数:");
int one = input.nextInt();
System.out.println("请输入第二个数:");
int two = input.nextInt();
System.out.println("两数相除的结果为:"+ one / two);
}catch(InputMismatchException e){
System.out.println(你应该输入整数);
}catch(ArithmeticException e){
System.out.println("除数不能为0");
}
System.out.println("程序结束了");
捕获异常:
try{
//一些会抛出异常的方法
}catch(Exception e){
//处理该异常的代码块
}catch(Exception2 e){
//处理(Exception2的代码块
}...(n个catch块)...{
}finall{
//最终要执行的一些代码块
}
注意:先小后大,先子类后父类,捕获就不抛出,抛出就不捕获。
子类能抛出父类的异常——比父类小,子类的异常不能比父类的大,子类的的异常可以比父类的多。
4.异常抛出和自己定义异常
throw(动作)——将产生的异常抛出
throws(声明)——声明将要抛出何种类型的异常
public void 方法名(参数列表)throws 异常列表{
//调用会抛出异常的方法或者:throw new Exception();
}
自定义异常格式:
class 自定义异常类 extends 异常类型{
}
示例:(喝大了)
public class DrunkException extends Exception{ //Java类库中没有DrunkException 类,所以定义时继承Exception类
public DrunkException (){
}
public DrunkException (String message){
super(message);
}
}
总结:
(1)处理运行异常时,采用逻辑去合理规避同时辅助try——catch处理
(2)多重catch快后面,可以加一个catch(Exception)来处理可能会被遗漏的的异常
(3)对于不确定的代码,也可以加上try——catch,处理潜在的异常
(4)尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
(5)具体如何处理异常,要根据不同的也无需求和异常类型去决定
(6)尽量添加finally语句块去释放占用的资源
异常笔记补充