Java异常总结

来源:互联网 发布:广告海报设计软件 编辑:程序博客网 时间:2024/06/05 09:29

Java异常总结

 

一.java异常类结构体系图

 



二.java异常基本概念

 

(一)Throwable:异常和错误的基类,提供了错误堆栈实现等一系列方法。 两个直接子类:Error & Exception

 

(二)两个子类区别:

     1. Error: 程序不应该捕捉的错误,应该交由JVM来处理。一般可能指非常重大的错误。这个错误我们一般获取不到。

     2. Exception:程序中应该要捕获的错误。这个异常类及它的子类是我们需要学习获取的。

   (1)RuntimeException:运行期异常,是Exception的子类,但不需捕捉的异常超类,但是实际发生异常时,还是会蹦的,只是编译时没有报错而已。比如除数为零,数组空指针等等,这些都是在运行之后才会报错。

   (2)除了RuntimeException类和它的子类,其他类都被定义为Checked类,是需要显式处理可能出现的异常,否则编译就报错了。Checked类主要包含:IO类和SQL类的异常情况,这些在使用时经常要先显示处理异常(使用throws或try   catch捕获)。

 


三.java常见的异常(最好记住)

(一)Exception 异常层次结构的根类

(二)ArithmeticException 算术错误情形,如以零作除数

(三)ArrayIndexOutOfBoundsException  数组小于或大于实际的数组大小

(四)NullPointerException  尝试访问null对象成员

(五)ClassNotFoundException   不能加载所需的类(常见于多态中向下转型)

(六)InputMismatchException   欲得到的数据类型与实际输入的类型不匹配

(七)IllegalArgumentException 方法接收到非法参数

(八)ClassCastException  类强转异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。

这些常见的异常都是Runtime异常,发送这些异常时,我们都要知道是怎么修改。当然还有其他的异常需要记住的,比如IO异常,上面只是一些比较基础的。

 


四.Java异常处理的格式

(一)java异常处理的关键字有5个:try、catch、finally、throw、throws。

(二)java异常捕获的格式。程序没有出现异常时,不会执行catch。
      1.try-catch
每次出现异常,都会去catch匹配,如果能匹配到,程序执行catch里面的代码
如果没有匹配到,程序抛出异常退出
     2.try-catch-catch...
如果出现异常,那么会一个一个去匹配catch子类在前,父类在后,否者出现编译错误
    3.try-finally
finally是程序必须执行的一个代码块,除了一种情况System.exit(0);
    4.try-catch-finally

 5.throw new Exception(“输入错误的提示!”);

这句语句也要放在try-catch语句模块里面或者放在throws的方法体里面。这种情况可用在获取的值,不符合自己的期望,比如要求输入不大于10的数,获取到大于10的数时,主动抛出异常,提示用户输入错误。但是一般不建议使用,因为使用异常捕获还要经过异常机制处理,会花费时间和内存,降低程序效率。

   (三)throw和throws的区别

这只是有点相似的关键字,并没有任何关联,要学会区分。

throw是用在方法体里面的,一般是放在判断情况的后面,手动抛出异常。

throws只能用在需要捕获异常的方法的方法名的括号后面使用。

 

 

 

 

四.Java异常处理的原则和技巧

 

    (一)避免过大的try块。不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
    (二)细化异常的类型。不要不管什么类型的异常都写成Excetpion。
    (三)catch块尽量保持一个块捕获一类异常。不要忽略捕获的异常,捕获到后要么处理,

要么转译,要么重新抛出新类型的异常。
    (四)不要把自己能处理的异常抛给别人。
    (五)不要用try...catch参与控制程序流程。异常控制的根本目的是处理程序的非正常情况。

所以像那些可以预料的错误,尽量在执行之前就做好相应的处理,

比如除数为零或空指针问题,要做事前判断再运行程序。


习题:
1、写一个登录(login)的方法,方法中有两个String类型形参,分别是账户名密码,校验用户账户名密码
,账户名不是"liwenzhi"或者密码不是"123456",则该方法向外抛出一个异常,

异常信息提示文字是“输入账户或者密码不正确”。


这题考察的是throw的使用:参考答案代码如下



 

2 0
原创粉丝点击