Java异常处理

1.错误的分类

    Error:错误,一般指的是系统方面的异常,比如:蓝屏,内存溢出,jvm运行环境出现了问题。

    Exception:是可控的异常,程序员可以在编写程序是解决的错误。

    两者的父类为Throwable

Java异常处理_第1张图片

2.Exception:是所有异常的父类,其下面可以派生出很多子类型。

3.异常处理机制:
在编写程序时,某一块代码可能会出现某些异常。我们应该对这些代码进行异常处理。
处理使用如下语法:
try{

}catch(异常类型的声明){

}finally{

}
我们将可以出现异常的代码块放入try{}中,jvm会进行检测try{}中的代码,
如果有异常,jvm就会将异常信息封装成相应的异常对象,然后转移到catch(){} 代码块中进行处理,执行{}中的业务逻辑。

然后会执行finally{}模块的代码。如果try{}中没有异常出现,最终也会执行finally{}中的逻辑。

4:catch代码块包含要捕获异常类型的声明。

      可以有1个或多个,在声明异常变量时,从上到下的catch块使用的异常类型可以是同级别的,

      如果多个异常类型有父子关系时,那么应该先写子异常,再写父异常(先写父异常时,编译不通过)

      当有多个catch时:

            如果保护代码中发生异常,异常被抛给第一个 catch 块。

            如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。
            如果不匹配,它会被传递给第二个 catch 块。
            如此,直到异常被捕获或者通过所有的 catch 块。
5:finally代码块:
finally代码块是有没有异常都会执行的(最后执行)。
通常用于关闭某些操作,删除临时文件等。
当程序中有return关键字的时候,先执行return,再执行finally代替。
6:throw:抛出异常对象
有时候,程序中捕获的异常,不想在catch代码块中处理,就要往外抛出,抛给调用者(谁调用这个方法谁就是调用者),由调用者来处理。
main中的异常最好直接处理.
7:throws:在定义方法时,必须声明要抛出的异常对象的类型。

throws:就是声明通知调用要处理的异常类型

8:异常的分类
检查性异常(编译时异常)
reg:IO异常
非检查性异常(运行时异常)
reg: NullPointerException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
ClassCastException
NumberFormatException
IllegalArgumentException
 
不要把ClassNotFoundException当成运行时异常
在throw运行时异常对象时,方法处不需要声明throws,因为编译器会忽略运行时异常。

当throw编译时异常时,必须在方法处声明throws此对象的类型。

 9:当父类中的方法声明异常时,子类重写方法时应该注意的事项:
子类重写父类的方法时,如果父类的方法声明了异常,
子类方法可以不声明
也可以按父类的方法进行声明
也可以声明父类方法的异常的子类型异常
不能声明父类方法异常的父类型
父类的方法如果没有声明异常,子类方法不可以声明异常
10:自定义异常.

只需要继承Exception,用系统提供的构造器

    Java异常处理_第2张图片

    Java异常处理_第3张图片

你可能感兴趣的:(Java异常处理)