14.异常
java强壮性:异常处理机制
1面试题
常见的一场有哪些(5个)
- 空指针异常nulllpointerxception,
- 算数异常ArithmeticException,
- 数组越界异常,
- 类型转换异常NumberFormatException
- IO
影响程序正常运行的事件分为 错误(Error)和异常(Exception)
错误:堆内存溢出(OutOfMeoryError)栈内存溢出(stackoverflow)方法区内存溢出 堆内存泄漏
当出现错误时妖媚改源码要么改机器配置
2异常体系
-
Throwable类是Error类和Exception类的父类
-
Exception是所有异常类的父类;把程序中的异常通常分为两大类:
运行时异常 (RuntimeExcepion)/非运行时异常(编译异常)
-
运行时异常通常指的是运行期间发生的异常,都是RuntimeException的子类;编译肯定通过
-
非运行时异常,一定要处理 编译才能通过
3异常的处理
- 捕捉异常,抓到后处理;程序就能往下继续执行
- try…catch…finally
3.1try语句块
- try块中放的是有可能发生异常的代码
- 一旦有异常出现之后就会跳出try语句块
3.2catch语句块
- catch代码块是当try中有异常出现时才有可能执行的
- catch是捕捉,用来抓异常对象的,catch里小括号里面的类类型一定要和异常对象类型匹配(或者父子关系)才能抓到
- catch代码块是抓到异常之后进行处理,通常是记录到log(日志)中方便后续追踪;
- catch语句块可以有很多个;小类型写在上边,大类型写在下面
public static void div(int a ,String b){
int c=0;
try{
c= a /Integer.parseInt(b);
System.out.println("18line +++++++++");
}catch(ArithmeticException e){
System.out,println(e);
System.out.println(e.getMessage());
//处理
System.out.println("捕捉到异常了");
}catch (NumberFormatException e) {
System.out.println("捕捉到的是数值转换异常");
} catch (Exception e) {
//其他异常
System.out.println("");
}
System.out.println(c);
}
}
3.3finally
-
不是必须的
-
里面的代码是一定会执行的代码块
-
异常出现或者不出现都会执行
-
try或者catch中出现return也会执行
-
文件资源(资源的关闭)时都会在finally语句块中执行
4抛异常
throws throw 关键字
throw用在放法体中后面跟的是异常对象,表示要抛出的异常对象
public static void addBike(ShareBike shareBike) throws Exception { if (shareBike == null) { // return; //抛 异常对象 throw new RuntimeException("共享单车传参是null"); } System.out.println("id " + shareBike.getId()); System.out.println("name " + shareBike.getName()); System.out.println("======"); }
5自定义异常
自定义一个异常类型,只需要写两个构造方法即可
public class CustomException extends RuntimeException { public CustomException() { } public CustomException(String message) { super(message); } }