科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条
科技百科
  • 人气指数: 2304 次
  • 编辑次数: 1 次 历史版本
  • 更新时间: 2009-03-11
admin
admin
发短消息
相关词条
SIM卡
SIM卡
WEBSPHERE
WEBSPHERE
FTP
FTP
並行計算
並行計算
国外计算机科学状况
国外计算机科学状况
混龄教育
混龄教育
学科信息门户
学科信息门户
UBUNTU
UBUNTU
恩尼格玛
恩尼格玛
广播工程师
广播工程师
推荐词条
希拉里二度竞选
希拉里二度竞选
《互联网百科系列》
《互联网百科系列》
《黑客百科》
《黑客百科》
《网络舆情百科》
《网络舆情百科》
《网络治理百科》
《网络治理百科》
《硅谷百科》
《硅谷百科》
2017年特斯拉
2017年特斯拉
MIT黑客全纪录
MIT黑客全纪录
桑达尔·皮查伊
桑达尔·皮查伊
阿里双十一成交额
阿里双十一成交额
最新词条

热门标签

微博侠 数字营销2011年度总结 政务微博元年 2011微博十大事件 美国十大创业孵化器 盘点美国导师型创业孵化器 盘点导师型创业孵化器 TechStars 智能电视大战前夜 竞争型国企 公益型国企 2011央视经济年度人物 Rhianna Pratchett 莱恩娜·普莱契 Zynga与Facebook关系 Zynga盈利危机 2010年手机社交游戏行业分析报告 游戏奖励 主流手机游戏公司运营表现 主流手机游戏公司运营对比数据 创建游戏原型 正反馈现象 易用性设计增强游戏体验 易用性设计 《The Sims Social》社交亮 心理生理学与游戏 Kixeye Storm8 Storm8公司 女性玩家营销策略 休闲游戏的创新性 游戏运营的数据分析 社交游戏分析学常见术语 游戏运营数据解析 iPad风行美国校园 iPad终结传统教科书 游戏平衡性 成长类型及情感元素 鸿蒙国际 云骗钱 2011年政务微博报告 《2011年政务微博报告》 方正产业图谱 方正改制考 通信企业属公益型国企 善用玩家作弊行为 手机游戏传播 每用户平均收入 ARPU值 ARPU 游戏授权三面观 游戏设计所运用的化学原理 iOS应用人性化界面设计原则 硬核游戏 硬核社交游戏 生物测量法研究玩家 全球移动用户 用户研究三部曲 Tagged转型故事 Tagged Instagram火爆的3大原因 全球第四大社交网络Badoo Badoo 2011年最迅猛的20大创业公司 病毒式传播功能支持的游戏设计 病毒式传播功能 美国社交游戏虚拟商品收益 Flipboard改变阅读 盘点10大最难iPhone游戏 移动应用设计7大主流趋势 成功的设计文件十个要点 游戏设计文件 应用内置付费功能 内置付费功能 IAP功能 IAP IAP模式 游戏易用性测试 生理心理游戏评估 游戏化游戏 全美社交游戏规模 美国社交游戏市场 全球平板电脑出货量 Facebook虚拟商品收益 Facebook全球广告营收 Facebook广告营收 失败游戏设计的数宗罪名 休闲游戏设计要点 玩游戏可提高认知能力 玩游戏与认知能力 全球游戏广告 独立开发者提高工作效率的100个要点 Facebook亚洲用户 免费游戏的10种创收模式 人类大脑可下载 2012年最值得期待的20位硅谷企业家 做空中概股的幕后黑手 做空中概股幕后黑手 苹果2013营收 Playfish社交游戏架构

目录

Java Exception 机制编辑本段回目录

为什么要自定义自己的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 用法编辑本段回目录


public class T {
    UserManager manager = new UserManager();
    public void testloadUser(String username, String password, String name, String email) {
        try {
          manager.loadUser(username);
        }
        catch (UserNotFoundException unfe) {
        }
    }
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserManager {
  public User loadUser(String username) throws UserNotFoundException {
    Connection con = null;
    PreparedStatement pstmt = null;
    try {
      pstmt = con.prepareStatement("select User form user where id=1");
      pstmt.setString(1, username);
      ResultSet rs = pstmt.executeQuery();
      if (!rs.next()) {
        throw new UserNotFoundException();
      }
      return null;
    } catch (SQLException ex) {
      return null;
    }
  }
}
class User {
}

 

public class UserNotFoundException extends Exception {
  private Throwable nestedThrowable = null;
  public UserNotFoundException() {
    super();
  }
  public UserNotFoundException(String msg) {
    super(msg);
  }
}
在这里我们自定义了自己的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 系列书籍

→如果您认为本词条还有待完善,请 编辑词条

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
0

标签: EXCEPTION

收藏到: Favorites  

同义词: 暂无同义词

关于本词条的评论 (共0条)发表评论>>

对词条发表评论

评论长度最大为200个字符。