Exception

Throwable类有两个子类:
|-  Exception
|-  Error
Throwable 类是 Java 语言中所有错误或异常的超类。
一般来说,程序产生异常是不可避免的,如 由除数为0导致产生的 ArithmeticException 。因此,若咱们在程序中对异常做出了相应的处理,则程序是可以继续向下执行的。
但是,程序在运行的时候是不允许存在错误的。若程序中突然产生了错误,那么程序就没有再继续运行的必要了。常言道“您用谎言去验证谎言,得到的一定是谎言。”程序也一样,“程序中有了一个错误,那么之后程序计算出来的数据,全部都是错误的。”
因此,咱们都是用Exception匹配异常,而不是使用Throwable类。

常见的程序错误:
使用java命令执行一个不存在的类时,就会产生错误:[code=java]D:\>java test
Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)[/code]此时抛出了一个名为 “NoClassDefFound[color=Red]Error[/color]” 的错误。

在java程序设计语言中,异常对象都是派生与Throwable类的一个实例,所有异常都是有Throwable继承而来,但在下一层即分解为两个分支:Error和Exception
     Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。不过这种情况很少出现。
  在进行Java程序设计的时候,需要关注的Exception层次结构。这个层次结构又分解为两个分支:一个分支是派生于RuntimeException的异常;另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;曾经能够正确运行,由于某些情况(例如:I/O错误)导致的异常不属于RuntimeException。
   如果遇到了无法处理的情况,Java的方法可以抛出一个异常。方法应该在其首部声明所有可能抛出的异常。这样可以从方法的首部反映出该方法可能会抛出哪类已检查异常。
   在自己编写方法时,不必将所有可能抛出的对象进行声明。至于什么时候需要在方法中用throws子句声明异常,什么异常必须使用throws子句声明,需要记住在遇到下面4种情况才会抛出异常:
   1.调用一个抛出已检查异常的方法
   2.在程序运行过程发现错误,并且利用throw语句抛出一个已检查异常
   3.程序出现错误
   4.Java虚拟机和运行时库出现的内部异常。

ERROR与EXCEPTION的区别
2012-05-18 16:38

 

Error类和Exception类都继承自Throwable类。

Error的继承关系:

java.lang.Object > java.lang.Throwable > java.lang.Error

Exception的继承关系:

java.lang.Object > java.lang.Throwable > java.lang.Exception

二者的不同之处:

Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)
2.表示一个由程序员导致的错误
3.应该在应用程序级被处理

Error:
1.总是不可控制的(unchecked)
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉

Java 中定义了两类异常: 
  1) Checked exception: 这类异常都是Exception的子类。异常的向上抛出机制进行处理,假如子类可能产生A异常,那么在父类中也必须throws A异常。可能导致的问题:代码效率低,耦合度过高。
  
  2) Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是非凡的,它们不能通过client code来试图解决,所以称为Unchecked exception 。

 

Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来。当然,实际的Java编程中,由于JDK平台已经为我们设计好了非常丰富和完整的异常对象分类模型。因此,java程序员一般是不需要再重新定义自己的异常对象。而且即便是需要扩展自定义的异常对象,也往往会从Exception派生而来。所以,对于java程序员而言,它一般只需要在它的顶级函数中catch(Exception ex)就可以捕获出所有的异常对象。 所有异常对象的根基类是 Throwable ,Throwable从Object直接继承而来(这是java系统所强制要求的),并且它实现了 Serializable接口(这为所有的异常对象都能够轻松跨越Java组件系统做好了最充分的物质准备)。

从Throwable直接派生出的异常类有Exception和Error 。Exception是java程序员所最熟悉的,它一般代表了真正实际意义上的异常对象的根基类。也即是说, Exception 和从它派生而来的所有异常都是应用程序能够catch到的,并且可以进行异常错误恢复处理的异常类型。而Error则表示Java系统中出现了一个非常严重的异常错误,并且这个错误可能是应用程序所不能恢复的,例如LinkageError ,或 ThreadDeath 等。

 

 

public class Test{   
  
    public static void main(String[] args) {   
  
        try {   
            new Test().nevv();   
        } catch (ExceptionB e) {   
        if(e.getCause()==null){ 
        System.out.println("异常B");  
        }else if(e.getCause() instanceof ExceptionA){ 
        System.out.println("异常A");  
        }else if(e.getCause() instanceof ExceptionC){ 
        System.out.println("异常C");  
        } 
            
        }   
    }   
  
    public void nevv() throws ExceptionB {   
        try {   
            new A();   
        } catch (ExceptionA e) {   
            throw new ExceptionB(e);   
        }catch (ExceptionC e) {   
            throw new ExceptionB(e);   
        }   
    }   

转载于:https://www.cnblogs.com/duanxz/archive/2012/08/16/2642428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值