异常基本概念
- java语言中,将程序执行中发生的不正常情况称为异常,开发中的语法错误和逻辑错误不是异常;
- 执行中的异常事件可以分为两类
- error(错误),java虚拟机无法解决的严重问题:如jvm系统内部错误,资源耗尽:StackOverflowError【栈溢出】和OOM(out of memory)
- exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问,读图读取 不存在的文件,网络连接中断等,分为运行时异常和编译时异常;
- 异常体系图
- java源程序-编译异常——字节码文件-运行异常——在内存中加载运行类
- 异常分为两大类,编译时异常和运行时异常
- 运行时异常,编译器不要求强制处置的异常,一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及其子类都是运行时异常
- 对于允许时异常,可以不做处理,因为这类异常很普遍,若泉处理可能会对程序的可读性和运行效率产生影响
- 编译时异常,时编译器要求必须处置的异常
- 常见运行时异常
- NullPointerException空指针异常
- 当程序试图在需要对象的方法使用null时,抛出该异常
- ClassCastException类型转化异常
- 当试图将对象强制转化为不是实例的子类时,抛出该异常
- ArithmeticException数学运算异常
- 当出现异常的运算条件时,抛出此异常
- ArrayIndexOutOfBoundsException数据下标越界异常
- 用非法索引访问数组时抛出的异常,如果索引为负或大于等于数组大小,则该索引为非法索引
- NumberFormatException数字格式不正确异常
- 当应用程序试图将字符串转化成一种数值类型时,但该字符串不能专为为适当格式,则抛出异常
- NullPointerException空指针异常
- 编译异常:在编译期间,就必须处理的异常,否则代码不能通过编译
- SQLException 操作数据库时,查询表可能发生异常
- IOException操作文件时,发生的异常
- FileNotFoundException 当操作一个不存在的文件时,发生异常
- ClassNotFoundException 加载类,而该类不存在时,异常
- EOFException 操作文件,到文件末尾,发生异常
- IIIegalArgumentException 参数异常
- 异常处理机制
-
- try-catch-finally:当异常发生时,系统将异常封装成Exception对象e,传递给catch,得到异常对象时,自定义处理,不管try代码块是否有异常发生,始终要执行finally,如果没有发生异常,catch代码块不会执行,finally一般时资源释放
- java中提供try和catch块来处理异常,try中包含可能出错的代码,catch块用于try块中发生的异常;
- try{可以的代码,将异常生成对应的异常对象,传递给catch块}catch(异常){对异常的处理};
- 如果异常发生,则异常发生后面的代码不会执行,直接进入catch块
- 如果异常没有发生,则顺序执行try的代码块不会进入到catch
- 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源)则使用finally{}
- 可以有多个catch语句捕获不同的异常,要求父类异常在后,子类异常在前,比如Exception在后,NullPointerException在前
- 可以进行tr-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉,应用场景就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑
-
public class TryCatchDetail01 { public static void main(String[] args) { try { int n1 = 10/1; String str = "123"; int a = Integer.parseInt(str); System.out.println(a); Person person = new Person(); person = null; person.getName(); } catch (ArithmeticException e) { System.out.println(e.getMessage()); } catch (NumberFormatException e) { System.out.println(e.getMessage()); } catch (NullPointerException e) { System.out.println(e.getMessage()); }finally { System.out.println("finally"); } } } class Person{ private String name ="jack"; public String getName() { return name; } }
View Code
- throws:JVM——MAIN方法——其他方法,throws可以将异常范围给上一层级,jvm输出异常信息,终止程序,默认采用throws方法
- try-catch-finally:当异常发生时,系统将异常封装成Exception对象e,传递给catch,得到异常对象时,自定义处理,不管try代码块是否有异常发生,始终要执行finally,如果没有发生异常,catch代码块不会执行,finally一般时资源释放
-