java异常处理概述
一.异常的概述
1.什么是异常
在程序执行过程中,出现的非正常情况,如果不处理JVM会异常停止
2.异常的抛出机制
java中把不同的异常用不同异常类表示,一旦出现某种异常,就创建该异常类对象并throws抛出,然后程序员可集中对抛出的对象进行catch处理,如果不处理异常对象会导致程序终止
3.如何对待异常
两种解决方法:一是遇到错误就终止程序运行,另一种方法是程序员编写程序时充分考虑到各种异常并极力避免,无法避免的使用throws 和 try-catch 方法处理以保证代码的健壮性
二、异常体系及常见异常
异常体系根父类:
java.lang.Throwable
---java.lang.Error:错误。JVM虚拟机无法解决的严重问题,如JVM系统内部错误,资源
耗尽等严重情况,一般不针对编写相应代码
---java.lang.Exception:异常。进行针对性编写代码处理的异常
---编译时异常/受检异常:在执行javac.exe时出现的异常
---ClassNotFoundException类未找到
---FileNotFoundException文件未找到
---IOException输入输出异常
---运行时异常(RunableExcption,编译时异常子类)/非受检异常:在执行java.exe时
出现的异常
---ArraysIndexOutOfBoundException数组下标越界
---NullPointerException空指针
---ClassCastException强制类型转换
---NumberFormatException类型不匹配
---InputMismatchException输入不匹配
---ArithmeticException算数异常
3.异常处理方式
try-catch-finally
1. 基本结构:
try{
...... //可能产生异常的代码
}
catch( 异常类型1 e ){
...... //当产生异常类型1型异常时的处置措施
}
catch( 异常类型2 e ){
...... //当产生异常类型2型异常时的处置措施
}
finally{
...... //无论是否发生异常,都无条件执行的语句
}(JDK7、9有新改动)
2.使用细节:
①将可能出现异常的代码声明在try语句中,一旦代码出现异常,就会自动生成一个
异常类的对象,并将此对象抛出,try中代码停止执行
②对于try语句中抛出的异常用catch进行捕获,一旦捕获异常进入catch语句处理可
使用printStackTrace()打印异常信息、getMessage()获取异常原因、也可自定义编
写输出语句
③最后将一定要被执行的语句声明在finally中
throws
1.格式:在方法声明中使用shrows 异常类1 异常类2 抛出异常
public void test() throws 异常类型1,异常类型2,.. {
//可能存在编译时异常
}
2.说明:
①从编译角度给异常提供了解决方案,但是将异常抛给了此方法的调用者,调用者仍要
考虑处理该异常,所以shrows不算真正处理了异常
②子类重写抛出异常类的方法时也要抛出该异常类本身或该异常类的子类
在开发中如何判断使用try-catch-finally还是shrows
1.如果设计到资源调用如流、数据库连接、网络连接必须使用try-catch防止内存泄漏
2.如果多个方法存在依次调用关系,可用throws抛出异常处理,只需最后调用的方法
try-catch处理即可
手动抛出异常throw
1.java中异常对象生成方式有两种或由JVM虚拟机自动生成或由开发人员手动创建
2.throw抛出的异常必须是Throwable子类实例,如果时编译时异常,同样需要try-catch
处理,运行时异常,同样编译器不会提示
自定义异常类
1.首先自定义异常类必须继承某一个异常类如编译时异常继承java.lang.Exception,运行
时异常继承java.lang.RuntameException
2.自定义异常类需要提供一个serialVersionUID以保证其唯一性