在java语言中,将程序执行中发生的不正常情况成为“异常”,在开发过程中的语法错误或者逻辑错误不算异常。

而常见的运行异常可以分为以下几种:输入不匹配异常,报错信息为InputMismatchException,空指针异常,报错信息为NullPointerException,数学运算异常,报错信息为ArithmeticException,数组下标越界异常,报错信息为ArrayIndexOutOfBoundsException,类型转换异常,报错信息为ClassCastException,数字格式不正确,NumberFormatException

还有一些编译异常的情况: 操作数据库时,查询表可能发生异常,报错信息为SQLException,

操作文件时,发生的异常,报错信息为IOExcepiton ,当操作一个不存在的文件时,发生异常,,报错信息为FileNotFoundException, 加载类,而该类不存在时,异常,报错信息为ClassNotFoundException ,操作文件,到文件末尾,发生异常,报错信息为EOFException,参数异常,报错信息为IIIegalArguementException.

而最为常见的便是编程异常,即编译期间必须处理的异常,否则代码不能通过编译。

为了保持整个程序的正常处理,所以必须对代码进行异常处理。

可以采用try catch语句进行处理,常见格式为:

try{

可能会异常的代码

}

cath(ExceptionNum1 e){

当产生ExceptionNum1异常会在这里进行处理  比如打印异常/比如输出对应的信息,

}

catch(ExceptionNUm2 e){

当产生ExceptionNum2异常会在这里进行处理  比如打印异常/比如输出对应的信息,

}finally{

无论上面是否会产生异常都会执行的代码

}

使用try-catch代码捕捉并处理异常时,不会因为产生异常影响程序的执行。

如果遇到需要处理多种异常信息的情况下,可以在一个try代码块后面跟多个catch代码块,如果使用了多个catch代码块,则catch代码块的异常类顺序一定是先子类后父类,否则直接编译时异常。

 

像数据库连接,输入输出流,网络编程socket等资源,JVM是不能自动回收的,我们需要手动的进行资源的释放。此时的资源的释放,就需要声明在finally中。

 

第二种方法是使用throws+异常类型,即声明抛出异常,但这种方法并不会真正的解决处理掉异常,而是相当于点出异常类型,让调用者想办法解决。

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表面该方法不对这些异常进行处理,而由该方法的调用者负责处理。

在方法声明中用throws语句可以声明抛出的异常的列表(可以抛出多个异常),throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类(多个异常用一个exception代替)。

该方法写在方法的声明处,此时此方法执行时,可能会抛出的类型。 如果一个方法(中的语句执行时)可能生成某种异常, 但是并不能确定如何处理这种异常, 则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。 在方法声明中用throws语句可以声明抛出异常的列表, throws后面的异常类型可以是方法中产生的异常类型, 也可以是它的父类。 一旦方法体执行时,出现异常,仍会在异常代码处,生成一个异常类的对象,此对象满足throws后异常类型是,就会被抛出。异常代码后续的代码,就不在执行。 throws的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉。

此外用户还可以通过自定义异常类去对错误信息进行描述和输出:

基本概念: 当程序中出现了某些“错误”,但是该错误信息并没有在 Throwable 子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

基本步骤:定义类:自定义异常类名(程序员自己写)继承 Exception或者RuntimeException。

如果继承Exception,属于编译异常。如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)。一般情况下,我们自定义异常是继承 RuntimeException, 即把自定义异常做成 运行时异常,好处是,我们可以使用默认的处理机制。比较方便。

同时异常类的方法也很重要:getMessage()方法用于返回该异常的详细描述字符,

printStackTrace()方法用于将该异常的跟踪栈信息输出到标准错误输出。(异常链)

printStackTrace(PrintStream s)方法用于将该异常的跟踪栈信息输出到指定的输出流

getStackTrace()方法用于返回该异常的跟踪栈信息。

最后要注意异常处理的规则:

异常处理机制只能用于处理不可预知的异常(将其与业务代码分离开),不能用来代替正常的流程控制,一般尽量避免catch all语句(导致无法对不同异常区分处理),不要忽略捕获到的异常

在平时的开发过程中,不要忽略异常,在那些容易产生错误的地方,或者自己不确定的地方,多使用try catch语句保证做到心中有数。

原文地址:http://www.cnblogs.com/jiazq/p/16797017.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性