社区
Java
帖子详情
有独到见解的请回复:异常(Exception)是什么,为什么使用异常,如何恰当的使用异常?
CyberWolf
2003-10-20 11:53:13
在csdn讨论区,有很多精辟的但书上没有的关于基础概念的论述,这些论述比起经典的概念可能有些不全面,失于偏颇,但在实际的应用中往往可操作性极强。希望有对“异常(Exception)是什么,为什么使用异常,如何恰当的使用异常?”有独到见解的朋友能把自己的珍藏见解贡献出来,大家共享,共同促进。
……独乐乐,与人乐乐,孰了?哈哈!
...全文
212
69
打赏
收藏
有独到见解的请回复:异常(Exception)是什么,为什么使用异常,如何恰当的使用异常?
在csdn讨论区,有很多精辟的但书上没有的关于基础概念的论述,这些论述比起经典的概念可能有些不全面,失于偏颇,但在实际的应用中往往可操作性极强。希望有对“异常(Exception)是什么,为什么使用异常,如何恰当的使用异常?”有独到见解的朋友能把自己的珍藏见解贡献出来,大家共享,共同促进。 ……独乐乐,与人乐乐,孰了?哈哈!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
69 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ajoo
2003-10-30
打赏
举报
回复
对了,如果锱殊必较于效率的话,我想请问,如果循环100万次,是那100万个if(data==0)昂贵呢?还是一个异常昂贵呢?
(前提是,有的异常monitor已经可以做到对异常没有抛出的时候保持0开销,只付出一些空间开销,而这个空间开销,我认为可以忽略)
ajoo
2003-10-30
打赏
举报
回复
呵呵。我都猜到你会这么说了。:)
我不是说了吗?让你把我当反面典型啊。
我看到这个api,但是我也举出了我的理由认为它不好的一面,异常好的一面啊。我不认为因为这个api做了这个选择,就可以充分地证明这个选择是永远正确的,可以用作指导的。
你可以说服我啊。我自己的看法怎么了?原因,论据我都给出了,不要因人废言,不要因人立言,对不对? 认为我的理由,逻辑有问题,欢迎批驳啊。
仅仅用某某人,某某书这么说的,某个api这么做的,对我说服力不够啊。
8-2法则就是说,对那80%,可读性,维护性比效率重要。对么?
然后我也给出了为什么它属于80%那里面,也给出了为什么它影响可读性,可维护性。
对这个推理有意见,给出反驳就行了啊。
truezerg
2003-10-30
打赏
举报
回复
括号里的前提不具有普遍性,我们讨论问题当然要讨论目前的情况,和普遍的情况。或许将来java发展了,对异常的处理的代价可以缩减到很少,那种情况下就要对问题重新审视,什么都是相对的。 所以讨论问题的大提前都应该以"目前"的"普遍"的情况出发才是。不然讨论什么样的问题都会变的没有意义。
ajoo兄,我们的性格难道很像?
我想我们没有必要在浪费更多的时间在这个贴子上无休止的争论下去。我的时间不多,我想你也一样很忙。
我们也没有必要谁把谁驳倒才肯罢休。你也说了你的观点,我也说了我的观点。或许别人还有他自己的观点。看这我们讨论的朋友,我想他自己中心也有自己的想法。大家对这个问题可以权衡一下,自己做出选择。
ajoo
2003-10-30
打赏
举报
回复
呵呵。就是。抛弃没必要的争论。我想我们可以关注一下比较容易分辨的一个问题:
是否异常monitor已经可以做到在异常没有抛出的时候保持0开销?
我所接受到的信息是肯定的,看来你得到的答案是否定的?
可惜,我在这方面没有第一手的信息,都是从和别人的讨论中得到的(据说c++的异常monitor就是0开销。)
ajoo
2003-10-29
打赏
举报
回复
呵呵,你要是循环一万次,还抛一万个异常呢。你不会象新闻记者一样,给我来个断章取义,说:ajoo说抛一万个异常没有效率问题把?
你怎么不看你循环体内部的东西比抛一个异常昂贵多了呢?
还是那句话,优化要看主要矛盾。
truezerg
2003-10-29
打赏
举报
回复
那你不认为抛一百个异常是坏处吗? 对比一下二种的好与坏,你选择就是抛异常了?
ajoo
2003-10-29
打赏
举报
回复
好处在于不需要占用这个0的返回值,还有其它的好处,我不都列出来了么?
truezerg
2003-10-29
打赏
举报
回复
那为什么非要浪费那本来不该浪费的时间和空间呢?
而且读一百个文件抛出一百个异常我没看来程序好在哪里啊。
ajoo
2003-10-29
打赏
举报
回复
比例,比例。优化程序要看瓶颈。一个小函数中某段代码占1%,那么不管这个函数被调用多少次,那段代码仍然占1%。
truezerg
2003-10-29
打赏
举报
回复
不是我最后的贴子说出了关键。我一直都是这个意思。只是我第一次发现我的表达能力差到这份上
truezerg
2003-10-29
打赏
举报
回复
是啊。可以这样写啊。 但是我读一百个文件正常的情况下就产生了一百个异常。这是主要的我认为不合适的地方啊。
ajoo
2003-10-29
打赏
举报
回复
就是。你这个最后的贴子说出了关键。
我就认为这里面应该慎重。除非有特别的效率考虑应该用异常。
对了,一百个文件是个循环,每个文件不是还有个小循环?
foreach file
try{
foreach data in file
......
}
catch(NoSuchDataException e){
}
不是一样可以?
truezerg
2003-10-29
打赏
举报
回复
便有些情况我们是无法用hasNext()这种方法预先判断来避免错误的。这就有一个到底是在出错时产生异常还是返回错误码的选择。我还是认为在没有意外的情况下可以预见这个事情一定会发生的时候用错误码返回,而不用异常
truezerg
2003-10-29
打赏
举报
回复
zerg: 错误码的用意就是为了让“一定发生的事情”“不应该发生”。
我说错了。 这里不是错误码的用意。我想说的就是例如hasNext()的这种用法的用意。
truezerg
2003-10-29
打赏
举报
回复
不是每一个文件一个循环,我的意思是我要循环读一百个文件。
ajoo
2003-10-29
打赏
举报
回复
你混淆了异常和错误的概念。
错误:程序逻辑或者外界条件不符合预期
异常:在发生错误时的一种处理手段
错误码:在发生错误时的一种处理手段
hasNext()在任何时候调用都是合法的,所以,不会产生错误
next()在hasNext()非假的时候是不合法的,所以,无论抛出异常还是返回特殊值,都是已经产生了错误
isClosed()不管connection是开着还是关着,调用都是合法的
createStatement()在connection关着的时候调用是非法的,无论抛出异常还是返回特殊值,都是已经产生了错误
ajoo
2003-10-29
打赏
举报
回复
不对。错误码和异常一样,表示错误已经发生了。只不过表示的手段有所不同。
iterator也一样,异常的开销仍然不大。尤其当你的循环很大的时候。
truezerg
2003-10-29
打赏
举报
回复
我觉得更科学的提法应该是“不应该发生”。用数组那个例子,你就不应该让它越界。用流的这个例子,你就不应该在eof上getData()。何必非要纠缠异常是否一定发生呢?
--------------------
zerg: 错误码的用意就是为了让“一定发生的事情”“不应该发生”。 数据的例子正好是不让它越界啊。 而用异常却让不应该发生的事情发生了,才去处理。
你还没理解我说的一定发生的意思。是一定发生的异常用错误码方式避免发生,不是让异常一定发生。 你用异常处理才是让异常一定发生呢。
ajoo
2003-10-29
打赏
举报
回复
我怎么看不懂你在说什么了?
每个文件一个循环,外面catch异常,有什么问题吗?
而且,我们比较方案,要看各个方案的有点缺点是不是?我已经说了,isEof()的方法是最好的。而你的data==0是最差的。
理由我就不用再重复一遍了吧?
至于异常开销,我只简单地说一句:对于这种循环里只抛出一次异常的情况,可以忽略,不要说还是昂贵的io的循环。
至于什么该不该浪费了,这要看你节省这一秒钟是不是值得,这个data==0造成的设计问题,绝对比这一点点效率差别大的多。
最后,iterator的好处在于它是用hasNext(),而不是用返回特殊值给next()来表示错误。
这正好说明了我的hasNext()预防错误好于产生异常,而异常好于用特殊返回值表示错误。
truezerg
2003-10-29
打赏
举报
回复
知道某件事可能造成错误,并且知道怎么去避免,为什么不去避免呢?
- 这正是错误码的用意啊
等错误发生了,无论用异常还是用错误码,都不如错误没有发生,对不对?
- 用错误码就是为了避免错误不要发生啊。
对了,你说io占的时间比例很大,所以异常的开销可乎略。那Iterator那种情况呢? 倒底它的时间比例如何? 况且异常不仅仅是浪费时间,也浪费空间啊
加载更多回复(49)
程序员的呐喊,完整扫描版
【坚持做一个傻瓜!】 《程序员的呐喊》的作者是业界知名的程序员——来自Google的Steve Yegge,他写过很多颇富争议的文章,其中有不少就收录在本书中。《程序员的呐喊》是他的精彩文章的合集。 《程序员的呐喊》涉及编程语言文化、代码方法学、Google公司文化等热点话题。对IT界的各种现象、技术、趋势等,作者都在本书中表达了自己独特犀利的观点。比如Java真的是一门优秀的面向对象语言吗?重构真的那么美好吗?强弱类型语言到底哪个更好?敏捷真的靠谱吗?程序员要不要懂数学等。另外,他还谈到了很多大公司的理念,比如亚马逊做平台为什么那么成功等。最后,《程序员的呐喊》还收录了他写的Google面试攻略,这篇文章可以说为无数应试者点亮了明灯。 《程序员的呐喊》讨论的都是程序员非常关注的热点话题,内容广泛,观点独到,非常适合广大程序员阅读参考。
org.thymeleaf.
exception
s.TemplateProcessing
Exception
:
Exception
evaluating OGNL expression解决方案
本文主要介绍了org.thymeleaf.
exception
s.TemplateProcessing
Exception
:
Exception
evaluating OGNL expression解决方案,希望能对
使用
thymeleaf模板的同学们有所帮助。 文章目录 1. 问题描述 2. 原因分析 2.1 第一步验证 2.2 第二步验证 3. 解决方案
框架系列之Spring5从放弃到入门
适合人群: Javaweb基础 课程目标: Spring注入、依赖、AOP面向切面开发技术 课程简介: 课程由浅入深,从项目开发环境搭建到Spring5的
使用
,重点讲解在企业项目开发中Spring常用功能,结合实际案例进行阶梯式讲解,...
python
异常
处理
异常
处理 try/except
异常
捕捉可以
使用
try/except 语句。 以下例子中,让用户输入一个合法的整数,但是允许用户中断这个程序(
使用
Control-C 或者操作系统提供的方法)。用户中断的信息会引发一个 KeyboardInterrupt
异常
。 try 语句按照如下方式工作; 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)。 如果没有
异常
发生,忽略 except 子句,try 子句执行后结束。 如果在执行 try 子句的过程中发生了
异常
,那么 try
Python
异常
处理
python提供了两个非常重要的功能来处理python程序在运行中出现的
异常
和错误。你可以
使用
该功能来调试python程序。
Java
50,538
社区成员
85,619
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章