概述
- 程序在进行过程中发生的错误,叫做异常
- 作用:增强程序的健壮性
- 异常在java中以类的形式存在,每一个异常类都能创建对象
- 所有的错误(error)和异常(exception)都是可以抛出的
- 所有的错误(error)只要执行,JVM退出(不能处理)
- 编译时异常和运行时异常都是发生在运行阶段,在编译阶段异常是不会发生
- 所有异常都是在执行时发生的:
- 因为异常只有在执行时才能new对象
- 异常的发生就是new异常对象
- 所有异常都是在执行时发生的:
- 编译时异常为什么而得名?
- 因为编译时异常必须在编译阶段预先处理,如果不处理,报错
- 运行时异常又称 非受控异常 未受检异常 (UnCheckedException)
- 编译时异常又称 受检异常 受控异常 (CheckedExeption)
对异常的处理
java中有两种方式处理异常
- 在方法声明的位置上使用throws 关键字 (抛给上一级)
- 在java中如果一直上抛最后会抛给JVM 最后终止程序的执行
- 一般不建议在main方法上使用throws关键字,建议使用 try..catch
- 使用try..catch 进行异常的捕捉
语法:
try{// try 尝试 java代码}catch(异常 变量名){//捕捉异常后的分支}
注意:
- 只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行
- 另外需注意,try语句块中某一行出现异常,该行后面的代码不会执行catch 捕捉到后,后续代码执行
自定义异常
- 所有异常都有共同的特点
- 有参构造
- 无参构造
- 自定义异常的编写
提供两个构造方法
- 无参- 有参(string s)
class MyException extends Exception {
public MyException(){
}
public MyException(String s){
super (s);
}
}
抛异常
throw 关键字
throw new MyException(“这是一个自定义异常”);
深入 try catch
- catch 后面的小括号可以是具体的异常类型,也可以是该异常类型的父类型
- catch可以写多个,建议catch一个一个精准处理
-
什么时候选择捕捉/上报
如果希望调用者来处理异常,使用上报
- 其他情况使用捕捉
异常对象的两个重要方法
获取异常简单的描述信息 这个信息就是构造器里的String参数
Exception exception = new Exception("你的程序报错")
String s = exception.getMessage();
System.out.println(s); 这里会输出 你的 程序报错
打印异常追踪的堆栈信息
exception.printStackTrace();
java.lang.Exception: asdfat While03.main(While03.java:6)
异常信息如何看
从上往下,一行一行(sun公司写的代码不用看)
finally
( 和try..catch 一起使用 )
- 在finally子句中的代码时最后执行的,并且一定会执行
- 即使try出了异常,也会执行
try和fianlly可以联合使用(没有catch)
try{ System.out.println("aaa"); return; } finally{ System.out.println("bbb"); } //输出结果 aaa bbb但是如果try中有System.exit(0); //退出jvm
finally不执行 只有这一条代码能治他
总结

