异常:异常也是生活中一项正常的事物,所以java将其描述为一个类,封装为一个对象。
l 异常分为两类:
1. 严重的---------可以使用Error来描述
a) 如运行一个根本不存在的文件;分配的数组大小大于虚拟机甚至物理内存的大小。
2. 不严重的------可以使用Exception来描述
Exception分为两类(分类的关键点,其出错结果会不会对后续代码产生影响)
1.编译时被检测到的异常
2.编译时不被检测到的异常(RuntimeException)
l throw 与 throws的区别
1. throw使用在函数上;throws使用在函数。
2. throw后面跟异常的对象;throws后面跟类,并可以是多个,用”,”逗号隔开
3. throw是方法的停止语句,和return一样。
① 把所有的语句写在throw之前。
② 出现throw,finally语句也不用谢了
l Throwable体系
|-- Error 不可治愈疾病
|-- Exception 可治愈疾病
1. Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
2. 只有Throwable体系中的成员,才能被throw或throws出来。
Throwable常用方法
Throwable fillInStackTrace() :在异常堆栈跟踪中填充
String getMessage() :获取错误信息
void printStackTrace() :将错误输出至标准错误流。虚拟机默认使用该方法打印异常。
void printStackTrace(PrintStream s) :将错误输出到指定的错误输出流中。
void printStackTrace(PrintWriter w) :将错误输出到指定的PrintWriter
toString() :该方法调用了getMessage()放法的返回内容。
l Exception在java提供的特殊处理方式:
try {
需要被处理的代码。
发生异常的代码,会创建对应的异常对象。
} catch(异常类) { 这里声明异常的引用,接收创建的异常对象,可以使用父类接收。
处理异常的代码块。
} finally {
一定会执行的代码。
}
**注意:
通过这种方式,程序员可以处理预想到的异常。
如果程序员自己不处理发生的异常,则程序会将其抛给虚拟机处理。
l 方法上的throws方法
在方法体上通过throws方法,声明该方法可能出现错误。
l 多异常处理
1. 声明的异常,要与将要发生的问题准确的对应上。
2. 当使用的方法声明了多个异常时,try该方法时,对每一个异常都使用一个catch()代码块来处理每一个异常。当然也可以使用这些异常共同的父类来接收(面向父类编程),但不建议这样。
3. 如果声明了多个异常,并且异常中出现了继承关系的类,那么父类catch()块要放在子类catch()块后面。
l 自定义异常
对于项目中会出现的java中没有描述的特有问题,可以自定义异常。
自定义的异常类,必须继承Throwable或其子类。
手动throw异常对象的时候,必须在方法体上throws该异常。
l RuntimeException
特点:
手动抛出其子类的异常的时候,不用在方法体上throws异常,编译同样可以通过。
在函数方法体上throws异常时,调用者不用处理该异常,编译同样可以通过。
当RuntimeException异常发生的时候,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码修改。