首页 > 代码库 > 异常笔记补充

异常笔记补充

异常(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语句块去释放占用的资源

异常笔记补充