异常处理
概念
java异常是处理程序中错误的一种机制, 错误通常指的是程序在运行的过程中发生的一些异常事件, 比如0作为除数,
数组下标越界, 流读取的文件不存在设计程序的时候应该在异常发生的时候能友好的处理一下这些异常;
抛出(throw)异常:
java中出现的异常事件都可以生成一个异常类的对象, 这个对象将异常发生的信息封装起来交给java虚拟机引擎去处理,
这个过程称为抛出(throw)异常;
捕获(catch)异常:
当java虚拟机接收到异常对象, 会寻找能处理这一异常的代码, 这个过程称为捕获(catch)异常;
分类:
trowable--所有异常的父类;
Excption(类)*-----可能出现的异常(必须处理):
RuntimeExcption---经常出现
非RuntimeExcption
Error(类)--系统错误,虚拟机错误,内存溢出,-----没法管;
捕获和处理
Exception e = new Exception();
1,try{
异常代码
}catch(Exception e){
e.getMessage()//获取错误信息
e.printStackTrace();//在控制台上打印出现异常的追踪信息;
}finally{
一定会执行的代码(除非关掉虚拟机)
一般用来释放资源
}
2.throws--将某个发布方法的异常抛出,谁调用方法谁处理;
throw 定义异常
public class Throwse { public static void main(String[] args) { String str = "抛出异常"; try { test(str); } catch (Exception e) { System.out.println("异常了"); e.printStackTrace(); } } public static String test(String str) throws Exception { throw new Exception(); } }
打印出“异常了”
其他问题:
在try语句中,子类(基类)异常的捕获语句不能写在父类(超类)异常捕获语句上面;
public static void main(String[] args) { String str = "抛出异常"; try { test(str); } catch (RuntimeException e) { System.out.println("异常了"); e.printStackTrace(); }catch (Exception e) { System.out.println("又异常了"); e.printStackTrace(); } }
打印出“又异常了”
//父类 public class MyException extends Exception { public MyException() { super("异常了"); } //子类 public class Throwse { public static void main(String[] args) { String str = "抛出异常"; try { test(str); } catch (MyException e) { System.out.println("异常了"); e.printStackTrace(); } } public static String test(String str) throws MyException { throw new MyException(); } }
打印出:
异常了
EXception.MyException: 异常了
at EXception.Throwse.test(Throwse.java:17)
at EXception.Throwse.main(Throwse.java:7)
自定义异常:
extends Exception;
extend RuntimeException;
方法重写异常:
重写方法需要抛出与原方法类型一致的异常,或者不抛出;