异常
异常分类
Throwable的父类是Object 类,子类分为Error和Exception
Error表示什么异常,一般怎么处理
一般是严重错误,程序无法处理,在非正常递归调用时可能会导致StackOverflowError,
Exception表示什么异常,一般这么处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXmpsZ8q-1587722939140)(C:\Users\72038714\AppData\Roaming\Typora\typora-user-images\1587689092790.png)]
异常处理
异常处理原则是:捕获并处理那些知道该如何处理的异常,抛出那些不知道如何处理的异常
捕获异常
捕获方式
(try{}catch{*****}finally{******} ),异常经过捕获后,执行会进入catch部分,finally最后都会执行。在执行完t ry catch整块之后,后面的代码会继续执行,不会终止。
1.多层异常捕获,需要先捕获子类异常,在捕获父类 异常,一次向上递进
-
finally 处理最后的资源类释放 流释放或者链接释放
-
非运行时异常需要提前进行异常处理,否则会有报语法错误
public class MyException { public static void main(String[] args) { try { process1(null); } catch (Exception e) { e.printStackTrace(); } try { process2(null); } catch (IOException e) { e.printStackTrace(); } try { process3(null); } catch (SQLException e) { e.printStackTrace(); } } static String process1(String word){ System.out.println("这里是NullPointerException"+System.currentTimeMillis()); if(null == word){ throw new NullPointerException(); } return word; } static void process2(String word) throws IOException { System.out.println("这里是IOException"+System.currentTimeMillis()); throw new IOException(); //process3(word); } static void process3(String word) throws SQLException { System.out.println("这里是SQLEXCEPTTION"+System.currentTimeMillis()); throw new SQLException(); //process2(word); } }
执行结果:
这里是NullPointerException1587692190353
这里是IOException1587692190354
这里是SQLEXCEPTTION1587692190354
java.lang.NullPointerException
at charpter08.MyException.process1(MyException.java:50)
at charpter08.MyException.main(MyException.java:29)
java.io.IOException
at charpter08.MyException.process2(MyException.java:58)
at charpter08.MyException.main(MyException.java:35)
java.sql.SQLException
at charpter08.MyException.process3(MyException.java:64)
at charpter08.MyException.main(MyException.java:41)
执行结果显示,三个调用的方法都执行了。依次抛出了他们的异常
异常抛出
异常的抛出使用throw关键字,需要再方法声明的最后。非运行时异常在声明时候需要处理
1.非运行时异常,如果在调用的方法中又抛出此类异常,或者在方法中声明了非运行时异常,那么该异常必须被立即处理,否则会出现语法错误。
static void process3