王朝网络
分享
 
 
 

Java Exception 机制

王朝java/jsp·作者佚名  2008-05-31
宽屏版  字体: |||超大  

为什么要自定义自己的Exception ,Java Exception机制与传统的C语言的异常处理机制有什么不同,这种Exception机制的意义在什么地方?接下来咱就来和你一起探讨Exception 的优缺点。

早期的C语言的异常处理机制,通常是我们人为的对返回结果加一些标志来进行判定,比如发生错误返回什么标志,正常情况下我们又是返回什么标记,而这些都不是语言本身所赋予我们的,而对于C语言这种机制又有什么问题哩?为什么新一代的语言 Java Ruby C# 等都用Exception机制而不是维持C语言的老样子?这些都是我们需要思考的问题。

C语言的异常处理机制全是我们人为的定义,这样就会造成业务逻辑的主线受到异常处理的牵制,或者说是我们难免会将注重力转移,并且造成业务逻辑与异常处理之间有很大程度上的缠绕。

Java Exception 异常处理机制其实起源很早,所以他也不是个什么新鲜的东西,假如您对Exception机制一点都不了解,没关系,只是国内通常接触新事务的时间都相对的要晚老美几年,但了解Java Exception机制对Java开发人员来说是必要的,不过Exception 异常处理机制也并没有固定,在Anders 的眼里他也是一个试验性的东西。

理论上异常处理划分为两个模型(中止模型与继续模型),但实际使用方面我们对中止模型用的比较多,这个模型比较实用,而继续模型则不是那么的应用普遍,多少是耦合的过于紧密。

中止模型 :假设错误非常严重,已至你无法在回到错误发生的地方,也就是说,这段程序经过判定认为,他已经没有办法挽回,于是就抛出异常,希望这个异常不要在回来,这也是Java 当前所采用的模式。

继续模型:这种模型的主旨是恢复当前的运行环境,然后希望能够重新回到错误的发生地,并希望第二次的尝试能够获得成功,这种模型通常为操作系统所应用。

下面我来简要的说说Java Exception 的好处及用法:

Java Exception 好处:让异常处理与业务逻辑的主线分离,我们可以对可以遇见的异常作分支处理,其实将业务逻辑与异常处理分离也是Exception设计的主旨,其次Java Exception 不需要像C语言那样在程序的多个地方去检测同一个错误,并就地作异常的处理,相比老式的错误处理,现在的错误处理的结构则来的更加清楚。

Java Exception 用法:下面的实例是一个loadUser方法,我们将抛出自定义的UserNotFoundException异常。

public class UserManager {

public User loadUser(String username) throws UserNotFoundException {

Connection con = null;

PreparedStatement pstmt = null;

try {

con = DbConnectionManager.getConnection();

pstmt = con.prepareStatement(LOAD_USER);

pstmt.setString(1, username);

ResultSet rs = pstmt.executeQuery();

if (!rs.next()) {

throw new UserNotFoundException();

}

}

}

}

public class UserNotFoundException extends Exception {

private Throwable nestedThrowable = null;

public UserNotFoundException() {

super();

}

public UserNotFoundException(String msg) {

super(msg);

}

}

public class test {

public void testloadUser(String userName,String passWord,

String name,String email){

try {

loadUser(username);

}

catch (UserNotFoundException unfe) {

Connection con = null;

PreparedStatement pstmt = null;

try {

con = DbConnectionManager.getConnection();

pstmt = con.prepareStatement(INSERT_USER);

pstmt.setString(1, username);

pstmt.setString(2, password);

pstmt.execute();

}

catch (Exception e) { }

}

在这里我们自定义了自己的UserNotFoundException异常,这样在客户调用loadUser()方法的时候Java就可以强制检测到这个UserNotFoundException异常,这样我们就可以作相应的处理工作,在这里应该可以看到testloadUser这里对UserNotFoundException这个异常有一个分支处理,这样的异常分支处理是不是很清楚哩,在此我不对他作解释,因为实在比较简单,其实美好的东西在我看来都有一个度,当这个度被你所打破后,那么他将不会再美好,Exception机制的应用也是,而这个度就需要你自己在实际项目中去斟酌了,接下来我就会阐述Exception的缺点。

Java 有将受控异常和运行时异常模型都实现,Rod Johnson认为在Java中主要实现运行时异常模型,至于受控异常则为辅,而BrUCe Eckel则来的更为偏激一些,他认为Java只需要实现运行时异常模型,而受控异常没有必要继续存在,为什么他们都这么认为哩,而且Bruce Eckel 之前很是推崇受控异常地,其实也没那么多为什么,这些思维的改变不过就是他们在实践当中发现了很多问题且对Exception 熟悉也更深刻了呗,所以说大师不是天生的,大师也需要学习,在这里我更赞成Rod Johnson 对Exception的观点,OK,废话我也不多说了,说说我熟悉中的Java Exception 缺点!

1 、当一个方法中被过多的抛出受控异常,那么在别人调用的时候会造成try/catch语句的泛滥,甚至经常出现嵌套异常,使得代码的可读性下降。

2、在某些方面检测系统的异常也并没有实际的意义,因为当出现这种异常的时候一般代表问题很严重我们无法恢复,如:捕捉数据库SQLException异常,该异常对我们来说没太大意义,因为错误信息太模糊,通常都是一些堆栈上的信息,看Rod Johnson 设计的关于JDBC方面的Exception Framework相信会对您产生很大的触动。

3、在大型系统中受控异常同时会造成异常处理类的泛滥,其实本人并没有介入过什么大型的Java 系统的设计工作,所以我也无从对这指三道四,没有实践就没有发言权,但我在一般的系统已经多少看到了一些这样的问题。

最后希望我的这篇解说能够进一步的增加你对 Java Exception 机制的了解,假如您还是不太清楚Exception机制,那么我推荐你看 《Thinking in Java》 这本书的第三版以及Rod Johnson的 eXPert one on one 系列书籍,祝您好运!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有