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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值