首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JAVA错误整理

2012-10-25 
JAVA异常整理整理的一点异常文档,和大家分享下。觉得“异常是为异常的情况而设计的,使用时也应该牢记这一原

JAVA异常整理

整理的一点异常文档,和大家分享下。觉得“异常是为异常的情况而设计的,使用时也应该牢记这一原则。”这句话说的太经典了。

?

??????? at T.noExceptionsHere(T.java:13)
??????? at T.main(T.java:7)


构建这些栈跟踪时需要为运行时栈做一份快照,正是这一部分开销很大。运行时栈不是为有效的异常创建而设计的,而是设计用来让运行时尽可能快地运行。入栈,出栈,入栈,出栈。让这样的工作顺利完成,而没有任何不必要的延迟。但是,当需要创建一个 Exception 时,JVM不得不说:“先别动,我想就您现在的样子存一份快照,所以暂时停止入栈和出栈操作,笑着等我拍完快照吧。”栈跟踪不只包含运行时栈中的一两个元素,而是包含这个栈中的每一个元素,从栈顶到栈底,还有行号和一切应有的东西。如果在一个深度为20的栈中创建了异常,那么就别指望只记录顶部的几个栈元素了――您得完完整整地记录下所有20个元素。从 main 或 Thread.run (在栈底)到栈顶,记录整个栈。

因此,创建异常这一部分开销很大。从技术上讲,栈跟踪快照是在本地方法 Throwable.fillInStackTrace() 中发生的,这个方法又是从Throwable contructor 那里调用的。但是这并没有什么影响――如果您创建一个 Exception,就得付出代价。好在捕获异常开销不大,因此可以使用 try-catch 将核心内容包起来。您也可以在方法定义中定义 throws子句,这样对性能不会造成什么损失,例如:

public Blah myMethod(Foo x) throws SomeBarException {
? ....


从技术上讲,您甚至可以随意地抛出异常,而不用花费很大的代价。招致性能损失的并不是 throw 操作——尽管在没有预先创建异常的情况下就抛出异常是有点不寻常。真正要花代价的是创建异常。

try {
? doThings();
? if (true)
??? throw new SomeException(); //cos my program runs too fast
}
catch(SomeException e) {
? doMoreThings();
}


幸运的是,好的编程习惯已教会我们,不应该不管三七二十一就抛出异常。异常是为异常的情况而设计的,使用时也应该牢记这一原则。但是,万一您不想遵从好的编程习惯,Java 语言就会让您知道,那样做可以让您的程序运行得更快,从而鼓励您去那样做。

?

?

1 楼 ningmenglovesoft 2009-09-08   觉得蛮好的。异常处理在java中真的很重要。如果异常捕捉不正确。要吗导致代码不健壮。要吗就是吃掉异常。对于调试带来很大的麻烦 2 楼 zuozhengfeng 2010-01-12   对于异常还是不太清楚,而且在项目开发总是无法确定该如何使用