Java异常机制

如果方法中的代码产生了异常却没有进行处理,编译器就会发现这个问题并提醒你:要么处理这个异常,要么就在异常说明中表明此方法将产生异常。(自顶向下强制执行的异常说明机制)你可以声明方法将抛出异常,实际上却不抛出。

Exception 是与编程有关的所有异常类的基类,它继承Throwable. printStackTrace();fillInStackTrace();如果你只是把当前异常对象重新抛出,那么 printStackTrace()方法显示的将是原来异常抛出点的调用栈信息,而非重新抛出点的信息。而要更这个信息,你可以调用 fillInStackTrace()方法,这将返回一个Throwable对象,它是通过把当前调用栈信息填入原来那个异常对象而建立的。你有可能会在捕获异常之后抛出另一个异常。这么做的话,将得到类似使用fillInStackTrace()的效果。

Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象可分为两种类型(指从Throwable继承而得到的类型): Error用来表示你不用关心的编译期和系统错误(除了特殊情况);Exception是可以被抛出的基本类型,在Java类库、用户方法以及运行事故障中都可能抛出Exception型异常。所以Java程序员关心的主要是Exception.

Java在什么情况下才能用到finally呢?
当你要把除内存之外的资源恢复到它们的初始状态时,就要用到finally子句。这种需要清理的资源包括:已经打开的文件或网络连接,你在屏幕上画的图形,甚至可以是外部世界的某个开关。

finally子句保证不管是否抛出异常以及抛出的异常时候被捕获,都能保finally中的语句都能执行。当涉及到break和continue时,finally子句也会得到执行

finally子句导致的异常丢失,在jdk1.5和1.6中是否还存在呢?YES!
package com.ufida.orders.agents.goods.rp;

public class ExceptionTest {
     class AException extends Exception{}
     class BException extends Exception{}
     public static void main(String[] args) throws AException, BException{
          ExceptionTest et = new ExceptionTest();
          try{
               throw et.new BException();
          }finally{
               throw et.new AException();
          }
     }
}
Exception in thread "main" com.ufida.orders.agents.goods.rp.ExceptionTest$AException
at com.ufida.orders.agents.goods.rp.ExceptionTest.main(ExceptionTest.java:11)

你可能感兴趣的:(java,thread,编程)