异常(Exception)是我们在初习Java的过程中必不可少且让人头痛的问题,最常见的空指针异常(NullPointerException),输入输出异常(IOException),字符串转数字异常(NumberFormatException)等。
异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类。这时候我们就用到 try...catch....finally 来帮助我们来处理抛出异常。
例如:
这两行代码有可能抛出 ClassNotFoundException 异常,无法找到指定的类异常。当应用程序试图使用forname方法通过字符串名加载类时,抛出该异常。和 SQLException 异常,用JDBC进行交互的时候遇见错误的时候会抛出。
常见的异常和抛出原因:
java.lang.IndexOutOfBoundsException
索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
java.lang.NumberFormatException
数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。
java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
java.lang.ArithmeticException
这个异常的解释是 “数学运算异常 “,比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数。
Java的异常很多,对于一些不常见的可以自行百度。之前看过一本书,我总结了一下使用 try..catch...finally 时要的事项:.
1.异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。
2.不要对大段代码进行try-catch,catch时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。
3.有try块放到了事务代码中,catch异常后,如果需要回滚事务,一定要注意手动回滚事务。
4.finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch。
5.不能在finally块中使用return,finally块中的return返回后方法结束执行,不会再执行try块中的return语句。
希望此片文章能帮助到您!!