Java异常机制学习

3种Java异常情况分别是:检查时异常、错误异常、运行时异常。
第一种:检查时异常:
通常是编写好的程序,这些异常能是在人的预期之内的

举个例子:假设有一个程序,是处理文件的。这就要求用户输入这个文件的地址路径,然后将文件地址传给相应的I/O处理,拿FileRedaer来说,如果路径对的话,则程序就会正常运行。但是程序不能保证用户每次都会提供正确无误的路劲,如果文件路径错误的话,则文件就不存在,就会报出FileNotFoundException的异常。此时程序就可以提示用户必须输入正确的路径。

例如:用户输入账号密码,密码错误,就可以提示用户输入错误。

第二种:错误异常:
通常这类异常是由程序外部的特殊条件造成的,应用程序通常是无法预期的;
例如:还拿用户操作文件来说吧,程序需要用户提供一个文件的地址。如果地址正确了,但是由于机器的故障而导致的错误,打不开等因素。就叫做错误异常。

错误异常是无法捕获的。错误是由Error及其子类指示的那些异常。

第三种:运行时异常:
这类异常时是发生在程序内部的,通常是由编程错误造成的;
例如:逻辑错误或API使用不当。

异常类关系

运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

   运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。 

非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

throws和throw的区别
1、throws
用在方法声明后,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,不一定会发生这些异常
2、throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
执行throw则一定抛出了某种异常

自定义异常类
Java自带的异常类,基本上可以满足我们遇到的大部分问题,除此之外,还可以自定义异常类。
定义一个通用的异常类
//通用异常类
class CommenException extends Exception {
public CommenException(String msg)
{
super(msg);
}
}

标签: none