关于异常的概述
异常是Java中提供的一种识别及响应错误情况的一致性机制,有效的异常处理可以使程序更具健壮性
异常发生的原因 > 用户输入了非法数据
> 要打开的文件不存在
> 网络通信时连接中断
> JVM内存溢出
> 某些物理错误
异常的继承体系
Exception
概述
Exception是所有异常类的父类,它又分为运行时异常和非运行时异常
非运行时异常 : 是在编译阶段发生的异常
运行时异常 : 是在程序运行时发生的异常,一般是由于程序员的粗心导致的
try...catch
用 try{ } 包裹可能发生异常的语句
用 catch 进行对应异常的处理
如果try中发生的异常,就转去catch
int a = 10;
int b = 0;
try {
System.out.println(a / b);
}catch (Exception e){
System.out.println("除数不能为0");
}
在执行过程中 如果有语句发生了异常,那么此语句之后的语句都不会被执行,而是取执行catch中的语句
如果没有发生异常,那么就不会执行catch中的语句
int a = 10;
int b = 0;
try{
System.out.println(1);
System.out.println(2);
System.out.println(a / b);
//在执行过程中 如果有语句发生了异常 那么此语句之后的语句都不会被执行 而是取执行catch中
//的语句
//如果没有发生异常 那么就不会执行catch中的语句
System.out.println(3);
System.out.println(4);
}catch (ArithmeticException e){
//获取错误信息 一般用于反应给客户
System.out.println("输入错误: " + e.getMessage());
//获取错误的详细栈帧 一般用于程序员排查错误
e.printStackTrace();
}
throws
throws只能抛出异常,但不会处理异常,抛出的异常交由调用它的地方
public static void main(String[] args) {
try {
m1();
}
catch (Exception e){
System.out.println("发现异常");
e.printStackTrace();
}
}
public static void m1() throws Exception{
m2();
}
public static void m2() throws Exception{
m3();
}
public static void m3() throws Exception{
}
}
finally
finally{} : 必须执行的代码块 除了使用System.exit()关闭JVM虚拟机的情况,finally一定会执行
一般用于关闭一些资源
finally不能单独使用 需要与try 或 try...catch 搭配使用
public static void main(String[] args) {
try {
System.out.println("我是try");
}catch (Exception e) {
System.out.println("我是catch");
}
finally {
System.out.println("我是finally");
}
}
//运行结果为 我是try
// 我是finally
自定义异常类
自定义一个异常类并集成于某个原有的异常类
例如 定义一个游戏角色生命值相关的异常类
public class NoLifeValueException extends RuntimeException {
public NoLifeValueException() {
}
public NoLifeValueException(String message) {
super(message);
}
}