java之异常
认识java中的异常:
有过编程经历的人都会知道,出错在编写程序时,是再正常不过的事,当运行程序时,每次看到那个程序出错时,都会觉得心塞,但是最让人心塞的事情往往是——程序运行的结果和我们设想的不一样,但是我们却得不到任何的错误提示,每每这个时候,都觉得世界充满了恶意。所以照这个来看。程序给我们报出异常还是很有用的;
我们先来看一下Java中的异常体系:首先,有一个父类:Throwable,然后在Throwable(父类)下面有两个子类:一个是 Error ,也就是错误,其中比较常见的有*Error (堆栈溢出),以及IOError(IO错误),由于我资历尚浅,目前,好像并没有遇到过;另外一个是: Exception(异常)了,在这个下面我们也有两个类:
(一)也就是我们说的异常,RuntimeException这个是在程序运行时,然后会在输出哪里报错这个比较常见的有:
① NullPrintException 空指针异常
② ArrayIndexOutOfBoundsException 数组下标越界异常
③ ClassCastException 类型转换异常
④ IllegalArgumentException 非法的参数异常
到目前为止我还只是遇到过第一个空指针异常,以及数组下标越界这两个异常,这两个应该是最常见的了;
(二)第二个是强制异常:强制异常的话,就是在写程序时就会报错,在编写时,底下出现红色线;其中比较常见的是:
① InterruptedException
② IOException
③ EOFException
④ FileNotFoundException
⑤ SocketException
而我现在目前还只是接触到了InterruptedException:例如:
解决异常的关键词
try、catch
首先是比较熟悉的try、catch,这两个关键字,我们现在看一下:
这样加入try{ }cath(){}语句之后程序就可以正常运行了;简单来说,我们运行Thread.sleep(200);时,如果程序运行出现异常,也就是InterruptedException时,try会捕获这个异常,然后程序会交给catch处理,执行我们catch中的代码从而使程序正常运行;所以我们把可能会出现异常的语句放在try语句块中,然后catch中放入会出现的异常,然后解决该异常的方法,注意所有的异常的要包括;
finally
然后是我们的finally关键字:finally{}是配合上面的try{}catch(){}一起使用的,finally和catch不一样的地方时,无论有没有发生异常,都会执行finally语句;所以finally语句块一般是用来执行对象或者资源的释放。
throw
该关键字目前还没有使用过,主要介绍他的功能:throw关键字的作用主要是配合new关键字一起使用,用法是创建一个异常对象信息,用于抛出这个异常。同样的throw抛出的异常也需要使用try{}catch(){}或者是下一个关键字throws来进行处理。
throws
throws关键字的作用主要是当一个方法运行发生异常时,会把这个异常丢出去让程序继续运行,而不是去解决它,至于让谁去解决它,并不在它的考虑范围之内。用法是:方法名()throws **Exception {},
出现异常时,解决的方法
当程序报错时,怎么样解决呢?其实总结起来就是输出,输出,再输出;只有通过输出我们才能知道程序到底发生了什么事情,它处于一个什么样的状态;比如当出现空指针异常时,我们先找到出错的那一行,然后,再把可能为空的对象输出来。这样我们就可以知道是哪一个空了。然后就是往上找,把我们的程序比作河流的话,那么我们的这个方法就是逆流而上。我们在程序中所有出现了该对象的地方输出,编上序列号,找到那个位置,然后再来解决;
这种输出的方法在程序没有报错,但是运行结果不对的时候,同样是很有效果的。
最后说一下为啥要使用异常,我们在使用手机电脑时,我们的程序,或多或少是都出现过异常,但是往往,我们却也能继续使用,顶多出现一个页面让我们去反馈一下我们出现的异常,但是我们自己写的android程序,当出现一点点异常时,我们的程序就会推出,崩溃,无法使用,所以说,这就是使用异常的好处:允许程序出错。而最终的目的就是让程序能运行,而不至于崩溃。