Java之今天的异常处理了吗

异常:指在程序运行过程当中发生的异常事件,好比除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。java

(这里须要注意,异常字面上的意思就是异于日常的错误,这里要和程序自己的设计错误区别开。笔者开始的时候一直在想若是一开始就知道程序会发生错误为啥还要执行它,不该该从新设计程序么?)数组

 

异常发生后,Java会经过面向对象的方法来处理异常,也就是要把错误包装成对象(这些对象都是可抛出的,即throw)。而后系统会在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理方法,这一过程称为捕获(catch)一个异常。测试

 

如今咱们来看系统会抛出哪些异常:spa

在Java中,异常都继承自java.lang.Throwable类,它有两个直接子类:Error和Exception设计

1.Error类对象(如动态链接错误、硬件层面错误、JVM错误或内存不足等),由JVM生成并抛出。一般,Java程序不对这类异常进行处理,通常应用程序都无力回天。对象

 

2.Exception类对象,也就是咱们一般看到的使用try、catch处理的错误,因此一般称错误处理为异常处理(Exception handling)。它又分为运行时异常(Runtime Exception),表明运行时由Java虚拟机生成的异常,如算术运算异常ArithmeticException、数组越界异常ArrayIndexOutOfBoundsEXception等;其余则为非运行时异常,如输入输出异常IOException等。 Java编译器要求Java程序必须捕获或声明全部的非运行时异常,但对运行时异常能够不作处理。继承

 

发生异常以后,处理方式有如下几种:事件

对运行时异常能够不作处理;使用try-catch-finally语句捕获异常;经过throws子句声明异常,还能够定义本身的异常类,并用throw语句来抛出它。内存

 

1.运行时的异常:程序在运行时检测到,它可能在程序的任意部位发生,并且其数目可能很大,此时系统会把生成的异常对象交给默认的异常处理程序,在标准输出上显示异常的内容以及发生异常的位置。资源

 

2.捕获异常,即try-catch-finally:

                    try{

                          Java statements

                         }catch(ExceptionType1 ExceptionObject){

                             Exception Handling

                              }catch(ExceptionType2 ExceptionObject){

                                           Exception Handling

                                                 }.....

                                                   }finally{

                                                                 final Handling

                                                                }

try后用大括号{}指定一段代码,表示该段代码可能会抛出一个或多个异常;

catch语句的参数相似方法的声明,包括一个异常类型和一个异常对象。,catch语句能够有一个或多个,并且至少有一个catch语句或finally语句

finally语句可指定一块代码,不管try指定的程序抛不抛出异常,也无论catch语句的异常类型是否与所抛出的异常的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。

 

3.异常的抛出:经过throw语句来实现,格式为throw ThrowableObject;

其中ThrowableObject必须为Throwable类或其子类的对象。

也能够定义本身的异常类,并用throw语句来抛出它。关于throw的和throws的用法有不少值得去讲的,笔者也会在下一篇中详细描述。

 

总的看来,Java的异常处理机制把异常事件看成对象来处理,利用类的层次性能够把多个具备相同父类的异常统一处理,也能够区分不一样的异常分别处理,使用灵活 。

 

但建议:1.异常控制的设计宗旨并非用来代替一些简单的测试

2.不要过度细化异常,以避免形成资源浪费。

3.不要关闭异常

4.对于自定义的异常类,一般把它做为Exception类的子类,而非Error类的子类。且定义类名时常以Exception结尾。

 

对于异常处理机制的使用值得多思考,要作到在恰当的时候使用恰当的异常处理方式,而这些都是在实践总结的基础上才能获得本身的经验啦!

相关文章
相关标签/搜索