JAVA异常机制基础
什么是异常
- 指程序运行中出现的各种状况。发生在程序运行期间,影响了正常的程序执行流程
异常分类
- 检查性异常
- 是程序员无法遇见的,最具代表性的是用户错误或问题引起的异常。如打开一个不存在文件时。
- 运行时异常
- 可能被程序员避免的异常,可以在编译时被忽略
- 错误ERROR
- 是脱离程序员控制的问题,不是异常。由虚拟机生成并抛出,大多与错误与代码编写这无关。遇到时JVM一般会选择终止线程。
异常处理机制
-
抛出异常
-
捕获异常
-
语法
//catch要从小到大 try { System.out.println(1/0); } catch (Exception e) {//想要捕获的异常类型 System.out.println("Exception"); }catch (Throwable t) { System.err.println("Throwable"); } finally {//可以不要 多用于善后工作,如关闭io流 System.out.println("结束"); } } -
自定义异常
-
步骤
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常对象
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给调用者的异常,继续进行下一步操作
- 在出现异常方法的调用者中捕获并处理异常
-
实例
//自定义异常类 public class Student extends Exception{ private int id; public Student(int id) { this.id = id; } @Override public String toString() { return "Student [id=" + id + "]"; } } //测试类 public class hello { static void test(int id) throws Student{ if (id<0) { throw new Student(id); //throw 方法内部 } System.out.println("结束"); } public static void main(String[] args) throws Student{ try { test(-2); } catch (Student e) { // TODO Auto-generated catch block System.out.println(e); } } } /* 输出: Student [id=2] */
-
-
实际应用中的经验总结
- 处理运行时异常时,用逻辑去合理规避同时辅助 try- catch 处理
- 在多重 catchi 块后面,可以加一个 catch (Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上 try- catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单地调用 printstack Trace0) 去打印输出
- 具体如何处理异常要根据不同的业务需求和异常类型去决定
- 尽量添加 finally 语句块去释放占用的资源

浙公网安备 33010602011771号