本文共 1986 字,大约阅读时间需要 6 分钟。
# 异常
## 1. 列举典型的异常
典型的错误Error: 方法递归调用,会发生栈内存溢出错误 StackOverflowError 当不断得向堆中创建对象时,会出现OutOfMemoryErrorException 异常
异常是可以捕捉住,然后让程序恢复运行Error和Exception有共同的父类 Throwable
A:异常的概述: 异常就是Java程序在运行过程中出现的错误。
B:异常的分类: 举例:张三骑自行车旅游 C:异常的继承体系 异常的基类: Throwable 严重问题: Error 不予处理,因为这种问题一般是很严重的问题,比如: 内存溢出 非严重问题: Exception 编译时异常: 非RuntimeException 运行时异常: RuntimeException## 2. 如何处理异常
### 2.1 积极处理 try { // 有可能出现异常的代码 } catch( 异常类型 ) { // 捕获异常后的代码 } 1. catch能捕捉的异常,要么精确匹配,要么用父类型匹配 2. 可以用多个catch捕获不同类型的异常 3. 多个catch块时,子类的catch块要写在前面,父类要写在后面 4. 1.7 后一个catch块中可以有多个平级的异常### 2.2. 消极处理
语法: 在方法的声明部分添加 throws 异常类型 含义: 说明方法在执行时有可能出现的异常 将异常交给方法的调用者处理 main 的调用者是jvm,当异常传给jvm时,程序运行就结束了JVM默认是如何处理异常的
main函数收到这个问题时,有两种处理方式: a:自己将该问题处理,然后继续运行 b:自己没有针对的处理方式,只有交给调用main的jvm来处理 jvm有一个默认的异常处理机制,就将该异常进行处理. 并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时将程序停止运行## 3. 从异常的行为分类:
未检查异常(uncheck) RuntimeException或它的子类 Error和它的子类 检查异常(check) Throwable Exception以及他们的子类 检查异常需要强制地配合try-catch或throws一起使用## 4. 主动抛出异常
throw new 异常对象(); // 只能是Exception或是Error的子类对象## 5. 异常对象的常见方法
e.getMessage() 获取异常的信息 e.printStackTrace() 打印异常的跟踪信息## 6. 异常的传播
以方法调用的反方向进行传播## 7. 自定义异常
### 1) 创建异常类 class MyException extends Exception{ // 检查异常 } class MyException extends RuntimeException { // 未检查异常 }## 8. 异常使用的经验
### 1) 不要吞掉异常 ### 2) 与有返回值的方法连用时要注意: ```java public class Exception5 { public static int test(){ try { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int r = 1/n; return r; } catch (Exception e ) { System.out.println(e.getMessage()); return -1; // 解决方法1: 在catch也写一个return返回结果 // throw e; // 解决方法2: 把异常重新抛出 } }public static void main(String[] args) {
int r = test(); System.out.println(r); } } ``` ### 3) 重写方法与异常声明(throws) 子类的重写方法,不能抛出比父类更多的异常(检查异常) 子类的重写方法,可以不抛出异常 若父类和子类方法throws都是未检查异常不用遵守上述约定4) 建议将检查异常转换为未检查异常重新抛出
## 9. finally 语法: ```java try { ... } catch(Exception e) {} finally {
// 无论出现异常与否,总会被执行的代码 } ``` 如果try catch 以及finally都出现了return语句, 以finally中的return为准 如果try 有return, 但finally中对返回的变量做了修改, 不会影响return的结果
转载地址:http://jqksi.baihongyu.com/