在编程中,我们或多或少的会遇到一些程序异常的情况,为了不影响程序的正常执行,我们需要在程序发生异常的情况下,进行一些操作来防止造成更大的损失。例如在我们平时的除法运算中,被除数是不能为0的,如果为0就会造成异常,同样在计算机程序中,如果除以一个为0的数字,那么这个语句就会是一个错误的语句,这样就会造成程序异常,后面的程序就会执行不下去,所以Java使用异常机制可以处理这样的情况,在出现这种情况之后,把这个异常捕获进行处理,从而不会影响后面的程序。
在Java中使用try{可能发生异常的程序模块}catch(Exception e){} finally{} 的语法规范来进行异常的处理,将可能发生异常的地方放入到try的模块中,当模块中的语句确实发生了异常之后,就会被后面的catch进行捕获,然后我们可以在catch模块中进行异常的处理,处理完成之后,程序会继续往下进行,不会影响到后面的处理。
有时候在我们捕获了异常之后,由于try里面的异常语句之后还有其他的语句需要执行,比如我们开始打开了文件,但是在读取文件的时候发生了异常,但是我们需要在最后将文件关闭,否则文件就会被一直占用,这时候我们可以在finall模块中将文件进行关闭。
在Java中有一类异常叫做运行时异常(RuntimeException),这类异常情况我们可以不强制使用try catch进行捕获程序也可以编译执行,比如空指针异常或者数组越界的异常,这种情况,如果在程序没有遇到这种情况的时候,程序正常执行,但是当程序遇到这些情况,程序就会报错了。还有另一类的异常非运行时异常,这类异常需要我们进行try catch进行捕获处理,否则的话程序不可编译,在编译的时候就会报错,例如文件操作的时候,就属于这类的异常。
在我们编码的过程中,有时候不想在当前模块或者方法里面处理异常,则我们可以将异常往上抛,也就是将异常抛给调用我们这个方法的那个模块,在那个模块中进行异常的处理,我们可以使用关键字throws关键字将异常抛给上一级,基本的语法格式是:public void fun() throws IOException {},这样我们就不需要强制在当前方法中进行try catch处理。