即使代码写的尽善尽美,但是在系统运行过程中还是会遇到各种各样的问题,比如:客户输入数据的格式、读取的文件不存在,网络是否畅通
java程序在执行过程中所发生的异常事件可以分为两类:
ERROR:java虚拟机无法解决的严重问题,jvm系统内部问题,资源耗尽等严重问题,一般不编写针对性的代码进行处理
Exception:因编程错误或者其它偶然外在因素导致的一般性问题,可以使用针对性的问题进行处理。如:空指针访问、试图读取不存在的文件
对于这些问题,一般有两种解决办法:
1、一旦遇到这些错误,程序就终止运行,
2、程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理
运行时异常:
编译器不强制要求处理的异常,一般是指编译时候的逻辑错误,对于这类异常,可以不做处理,这类异常很普遍,若全部处理,可能会对程序的可读性和运行效率产生影响
编译时异常:
编译器要求必须处理的异常,即程序运行时候由于外界的异常因素造成的异常,对于这类异常,如果不处理,可能会带来意想不到的结果
java提供的异常处理是抓抛模型
java程序运行时候如果出现异常,会生成一个异常处理类对象,该异常对象会交给java运行时系统,这个过程称为抛出异常
异常对象的生成:
1、有java虚拟机自动生成,程序运行过程中,虚拟机检测到程序发生了问题,如果在当前的代码中没有找到相应的处理程序,就会在后天自动创建一个对应的异常类实例并抛出
2、有开发人员手动创建,创建好的异常对象如果不抛出,对程序没有任何影响
如果一个方法内抛出异常,该异常对象会抛给方法的调用者,如果方法调用者在程序中没有处理,它将继续向上抛出,直到异常被处理
如果一个异常回到main方法,并且main方法也没有处理,则程序终止运行
无论在try代码块中是否发生了异常,catch语句是否执行,catch语句中是否异常,catch是否有return语句,finally中的语句都会执行
声明抛出异常:
如果方法中可能生产某种异常,但是并不能确定如何处理这种异常,则此方法应显示的声明抛出异常,表明该方法不对异常做处理,由该方法的调用者处理
在方法声明中用throws语句可以声明异常的列表,throws后面的异常方法可以是方法中产生的异常类型,也可以是它的父类
java异常类对象在程序执行过程中出现的异常可以由系统自动抛出,也可以根据需要人工创建并抛出
首先生产异常类对象,然后通过throw语句实现抛出操作(提交给java运行环境),可以抛出的异常是Throwable或子类
捕获异常最理想是在编译期间,但有的错误只在运行时才会发生
创建自定义异常类
一般的:用户自定义类都是RuntimeException的子类
自定义类都需要编写几个重载的构造器
自定义的异常类通过throw抛出
自定义类最重要的是异常类的名称,当异常出现时候,可以根据异常判断异常的类型