一 异常的组织结构
顶级父类:Throwable顶级父类有getMessage方法,用来输出错误信息,除此之外,Throwable还会输出异常类的位置等信息.
Error:代表的JVM本身错误,常见的是内存不足,程序员无法改变.
Exception:其中IOException是编译期异常,RuntimeException是运行期异常,编译期的异常必须处理,运行期的异常可以选择不处理.
二 异常的五大关键字(throw try cath throws finall)
- throw:用来抛出异常
throw new FileNotFoundException("文件不存在");
- try cath:用来捕获并处理异常
try { //执行语句 }catch(FileNotFoundException e) { //捕获到异常的处理 }
- throws:用来声明异常,当方式异常的时候,会输出异常,程序停止,并没有对异常进行处理
public static void main(String[] args) throws FileNotFoundException{ read("b.txt"); } public static void read(String path) throws FileNotFoundException { if (!path.equals("a.txt")) {//如果不是 a.txt这个文件 // 我假设 如果不是 a.txt 认为 该文件不存在 是一个错误 也就是异常 throw throw new FileNotFoundException("文件不存在"); } }
- finally: 不管是否异常都会输出
public class ThrowDemo { public static void main(String[] args) { try { read("b.txt"); }catch (FileNotFoundException e){ System.out.println("捕获到异常的处理"); }finally { System.out.println("不管是否捕获到异常都会输出!"); } } /* *抛出异常的时候需要用throws进行声明 */ public static void read(String path) throws FileNotFoundException { if (!path.equals("a.txt")) { // 假设如果不满足条件,就跑出异常 throw new FileNotFoundException("文件不存在"); } }
- 自定义异常类需要继承Exception类,一般都需要写默认和参数是String的两个构造
class exceptionDemo extends Exception{ exceptionDemo(){}; exceptionDemo(String name){ super(name);//调用父类Exception的构造,Exception再调用顶级父类Throwable的构造,赋值给Throwable的message属性 } }