java 异常机制

下面是java异常类的层次图:
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.Error
java.lang.ThreadDeath

1、Throwable
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
两个子类的实例Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。

2、Exception
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。

3、Error
Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。
在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。

4、RuntimeException
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过,这种异常可以通过改进代码实现来避免。

5、ThreadDeath
调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。
仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。
如果没有捕获 ThreadDeath,则顶级错误处理程序不会输出消息。
虽然 ThreadDeath 类是“正常出现”的,但它只能是 Error 的子类而不是 Exception 的子类,因为许多应用程序捕获所有出现的 Exception,然后又将其放弃。

以上是对有关异常API的一个简单介绍,用法都很简单,关键在于理解异常处理的原理,具体用法参看Java API文档。

下面是一个有关异常处理的逻辑代码:

public class ExceptionTest {

public static void main(String args[]){

function1();
System.out.println("do in main");
}
static Exception1 exp1;
private static void function1(){
exp1=new Exception1();
try{
System.out.println("t3");
throw new Exception2();
//unreached code
}catch(Exception2 e2){
System.out.println("t1");
try{
throw exp1;
//System.out.println(1/0);
//System.out.println("dddd");
}catch(Exception e){
System.out.println("t2");
}finally{
System.out.println("t5");
}
}finally{
System.out.println("t4");
}


}

private static void function2(){
System.out.println("do in function2");
}

private static void function3(){
System.out.println("do in function3");
}
}

class Exception1 extends Exception{

public void println(String str){
System.out.println("Exception1 :"+str);
}
}

class Exception2 extends Exception{

}


输出结果:
t3
t1
t2
t5
t4
do in main

由上可知:
当程序抛出异常后,由相应的捕获代码捕获异常,抛出异常语句后面的代码将不再执行。而是向上执行,知道调用该方法的地方,然后继续向下执行。
try catch语句是可以嵌套使用的,finally语句始终被执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值