java基础学习—异常

来源:互联网 发布:java多线程框架有哪些 编辑:程序博客网 时间:2024/05/18 19:45


1、java处理异常的结构

1.1 java.lang.Throwable  Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Javathrow 语句抛出。类似地,只有此类或其子类之一才可以是catch 子句中的参数类型。

1.2 java.lang.Error 继承自Throwable,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然ThreadDeath 错误是一个“正规”的条件,但它也是Error 的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其throws 子句中声明可能抛出但是未能捕获的Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。 

1.3 java.lang.Exception 它指出了合理的应用程序想要捕获的条件。


2、java.lang.Error 抛出的时候可以不用声明,当然也可以去捕获它。

import java.io.IOError;public class TestCatchError {public static void main(String[] args) {try {throw new IOError(null);} catch (Error e) {e.printStackTrace();}}}


上面的输出结果是:

java.io.IOError
at TestCatchError.main(TestCatchError.java:7)


3、java.lang.Exception

3.1 异常处理通常有两种方式:捕获或抛出

3.2 抛出是通过关键字throw 和 throws 进行

3.3 throw 是在方法体内使用,如在方法体内:throw new Exception("异常信息");

3.4 throws 是在方法上使用的,如public void getConn() throws SQLException{ }

3.5 throws 语句可以同时抛出多个异常,使用逗号隔开 int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException {  }

3.6 捕获的方式

try{ }catch{ }finally{ }  说明:尝试捕获异常,并处理异常,最终释放资源。

try{ } catch { } 说明:尝试捕获异常,并处理异常。处理异常时,最好以能够描述这个异常情况的方向进行处理。如,getMassage( ),方便发现问题

try{ } finally{ } 说明,这一个没有使用catch进行处理,则方法上需要加上throws 语句,标识出去。

3.7 在cath{ }块中同样可以继续抛出异常

3.8 如果在方法内抛出了异常,那么必须在方法上表明异常,但除开抛出的是RuntimeException以外,否则编译不通过

3.9 如果在方法throws句子上声明了几个异常,那么调用此方法的方法就对应几个catch块,但不要定义多余catch,若多个catch块中的异常出现继承关系,父类异常catch块,放最下面。

3.10 声明的异常越具体越好

3.11对于层次较复杂的程序,处理异常的思想是:早抛出,晚捕获


4 、自定义异常

4.1 自定义异常是在java没有对此问题进行封装,而程序又需要自己处理的问题。

4.2 自定义异常一般继承Exception或RuntimeException

4.3 如果希望自定义异常的发生使程序无法继续执行,就让自定义异常继承RuntimeException。

class MyOwnException extends RunTimeException {public MyOwnException() {}public MyOwnException(String message) {super(message);//异常的信息}}

4.4 对于捕获的异常若其信息对于调用此方法的方法没有任何意义的时候,最好将捕获的异常进行转换,使调用处能够收到对他有用的信息,这种信息的载体就是自定义的异常。如:汇款的时候,对方入账没有成功(数据库增加记录产生异常),则给调用处(通常是用户)返回:不成功异常

*********此处需要补代码



5 、异常的继承

5.1 子类抛出的异常必须是父类抛出的异常或者其子集(和子类覆盖父类方法时的访问权限只能等于或大于父类,而不能小于父类)

5.2 如果父类的方法没有抛出异常,则子类覆盖的方法也不能抛出异常,只能自己捕获并处理

5.3 接口中定义的抽象方法同样可以声明异常

interface aaa  {void bb() throws IOException;}




原创粉丝点击