看了文章,还是不明白!!!checked exceptions是可恢复的?难道runtime exceptions/errors就不可恢复吗?在我看来,每个exception都是program的error导致的,这些errors都是因为你的编程错误引起的,为什么要分成这三类呢?期待答案或者继续细读文章!!

解决方案 »

  1.   

    runtime exception意味着程序员的问题编译不通过不一定是由于check exception的问题
    你随便把一个C文件用java编译当然也...呵呵check exception首先得是一个exception
    如果你认为别你调用你的类的一个方法有可能导致出错,那你就应该为此方法配上一下exception
    比如你读取一个文件就可能有IOExeption,但你不能因为这个exception而导致整个系统不可运行,所以应该为这个read方法配上一个IOExeption这篇文章只是简单地说了一下exception的基本用法,当然其中的比喻可能有不当之处http://www.csdn.net/develop/article/26/26772.shtm
    最近写的关于模式的一文,欢迎各位兄弟指点
      

  2.   

    关于exception,可以参考effective java & core java楼主能在短时间内理解exception,实属牛人,呵呵
    如果想灵活运用exception的话,建议多看一下jdk源代码中的exception是怎么用的
    其实在java中,exception和event等很多原理都很简单,多实践便能得其精髓
      

  3.   

    “能不能这么理解:check exception是程序的硬伤,而runtime exception是程序的一小bug,java尽量要防止你的程序有硬伤,所以在编译期时对其检测.”
    不能。runtime exception是假设不会错,所以写程序的时候不强迫你进行处理。checked exception是假设会出错,所以要你在写程序的时候就写好处理逻辑。“我的问题就是:是不是应该把check exception看成是:比如我方队竟派了6名队员上场(硬伤),所以编译不通过.而观众喝倒彩和打手都应该是runtime exception的一种呢?”
    根据我上面的解释,这样打比方是不恰当的。6名队员上场就不是exception了,是语法错误。
      

  4.   

    Aa7643(小刀弄剑) :
    TIJ里的意思是exceptions都是不能恢复的,只能对其处理,不能在处理完后再回到抛出点.
    似乎编译器更看中check exception而非runtime exception.光声明不处理的话,真不知道虚拟机是怎么对其处理的(如果这归虚拟机管的话)Hodex(小何才露尖尖角) :
    打手和被喝倒彩似乎都是运行时的exception,应该归并到runtime exception里吧?check或非check是不是都是针对编译器是否去check而言的呢
      

  5.   

    其他高人来说说 Sheepy(-[J.2.E.E]-)说的对不对啊!
    我觉的说的很好,如果大家都不意见,我就按着Sheepy说的去理解啦!!
      

  6.   

    TO:Hodex(小何才露尖尖角)
    “编译不通过不一定是由于check exception的问题
    你随便把一个C文件用java编译当然也...呵呵”
    我想这不是一个exception,因为你这个C文件和你原来的program根本就拉不上关系,就好象我和NBA,因为我不是场上的一员,不是一类的,就算我所做的是对或错,都对这常比赛无关;但是说到球场的观众闹事,为什么它就是一个exception呢?因为观众和比赛已经联系在一起了,就像一个类要继承另一个类的属性,方法,如果运用不正确,都会导致整个program的不能正常执行,“球员”和“观众”可以看成两个类吧!(我都说了些什么?不好意思,菜鸟也:P)TO:Sheepy(-[J.2.E.E]-) 
    Hodex说Exception分三类:checked exception/runtime exception/errors,你说“6名队员上场就不是exception了,是语法错误。”语法错误是一个error吧,那它到底是不是一个exception??Hodex说电子记分突然把74写成47,这是一个error,是一个exception,你们说的error应该属于同一类吧!!!
      

  7.   

    错。error不属于exception。error属于很严重的错误,比如内存不足,已经不是和程序逻辑相关的了。从类的层次结构来看,Error和Exception是两个独立的类,都是Throwable的子类。RuntimeException是Exception的子类。
    如果74变47是因为电压波动或者其他什么原因造成内存中数据损坏,那么属于error。你明知道只能5个人却派了6个人上场,明显属于语法错误。
      

  8.   

    “error不属于exception”我又迷茫了!
      

  9.   

    所有的Throwable其实都是运行时才发生的
    1 The name RuntimeException is somewhat confusing. Of course, all of the errors we are discussing occur at run time.
    2 The rule “If it is a RuntimeException, it was your fault” works pretty well. You could have avoided that ArrayIndexOutOfBoundsException by testing the array index against the array bounds.
    3 These runtime errors are completely under your control.
    4 In summary, a method must declare all the checked exceptions that it might throw. Unchecked exceptions are either beyond your control (Error) or result from conditions that you should not have allowed in the first place (RuntimeException).
    ---form <<core java>>
    我举C语言的例子是为了说明上6个人不是exception,而是语法错误,不能执行
      

  10.   

    那check exception到底是什么??
    大家都没有正面回答这个问题我现在对sheepy说的"runtime exception是假设不会错"表示疑问
    在一切java程序中,runtime exception都是被缺省声明的(见TIJ 2e 喉结 396页),这么说来的话,java还是不放心你对runtime exception的操作啊我还是回到我一开始的地方:check exception是程序的硬伤,java在尽量让你避免它,而runtime exception则轻许多
      

  11.   

    Exceptions that inherit from RuntimeException include such problems as:
    &#8226; A bad cast;
    &#8226; An out-of-bounds array access;
    &#8226; A null pointer access.
    Exceptions that do not inherit from RuntimeException include:(就是checked exceptions啦)
    &#8226; Trying to read past the end of a file;
    &#8226; Trying to open a malformed URL;
    &#8226; Trying to find a Class object for a string that does not denote an existing class.
      

  12.   

    Unchecked exceptions are either beyond your control (Error) or result from conditions that you should not have allowed in the first place result from conditions that you should not have allowed in the first place 
    这句话是啥意思啊
      

  13.   

    并非是你一开始允许的情况 所引起的。也就是说,你并没有想让它出错。比如NumberFormatException,如果你输入的字符串不是数字,却让程序将它转换成数字,就会抛出这个异常,但是这并不是你的意图,一般认为传递进来的字符串应该会是一个数字。所以这个exception是一个unchecked exception,并没有强制要求你在写程序的时候就进行catch等处理。
      

  14.   

    真不想让这帖沉了
    我想太多人对这个exception晕头转向了
    大家再多看两眼反正现在我知道了,写程序的时候注意check exception就好了,先让它通过编译,
    然后自己再慢慢找它里面的runtime exception
      

  15.   

    呵呵,也凑个热闹,胡说八道一番:篮球比赛本来是每队5人,你却派上了11个人,于是,裁判就告诉你,这是个语法错误,比赛根本就不能开始的
    就好像程序中main方法忘了加String[] args做参数,或是忘了某个括号的匹配等你一看,哦,昨天没睡好,记成是橄榄球比赛了,马上换一批队员上(这老板手下的俱乐部还不少)。于是科比、马龙、詹姆斯等等上场了(这好像不是湖人,应该是nba老中青三代联谊,^_^),裁判一看,马上就紧张了。先问科比的案件结掉没有?你就给他一份声明,说科比刚参加过了听证会,有参赛的资格;同时出示詹姆斯选秀时因不足22岁而发表的志愿声明,证明小“国王”的参赛资格。但是裁判还是不放心,说马龙的肥肘伤害性太大,对火箭的季后赛就多次弄得姚明、纳克巴等人仰马翻,差点惹现场观众暴乱,你赶紧递给裁判一个眼神,示意晚上有活动安排(黑哨?),并让马龙当场写下不使用肥肘伤害对方队员的保证。ok,几经周折,裁判终于放行(所有的check exceotin都被catch或是做了更高一级的throws声明),比赛开始了……现在是科比拿球,他在外围不停运球,寻找对方防守的漏洞。机会果然来了,在三秒区附件游弋不定的邮差趁防守队员注视科比的时候,悄然潜入篮下,科比的球应声而到,好个妙传!马龙一阵兴奋,跳起来正准备往篮里扣,却发现有个防守队员已经贴近了。老马龙玩心一起,突然想玩个声东击西的把戏,把球传给了另一侧的詹姆斯,同时,裁判的哨也响了。原来老邮差毕竟不是飞人,滞空能力还差了点,再加上年老体衰,等球离手的时候,双脚早已触地,“起跳违例”!一个runtime exception就这样发生了。观众席上阵阵嘘声,教练更是气得吹胡子瞪眼。^_^比赛继续……这次科比再不信任马龙,老老实实按教练的战术安排,将球交到奥尼尔手里。大鲨鱼果然名不虚传,轻松挤开防守他的队员,一记重扣!“咔嚓”,球进了,可怜的篮框也被300多磅重的鲨鱼生生给砸坏。由于出现了严重的error,比赛不得不暂时中止欲知后事如何,且听下回分解:)
      

  16.   

    ft,贴出来才看到check exception都拼错了,特次更正
      

  17.   

    说说我理解的checked exception和runtime exception运行期间只要出现了异常(exception)都可以理解为运行时间发生的异常(an exception occured during runtime)。但是这些异常都应该是程序员必须处理的。程序员应该检查自己的代码,使得异常被最终呈现在用户面前之前正确的处理掉。作为很多程序员工作经验的结晶,Java的类库中已经处理掉了一些异常,但是这应当视为程序员的工作,一个你先前的某个程序员的工作成果。如果你的代码中会在运行时产生某个异常,那么一旦你了解到就应该处理掉它,此时这个异常就可以被称为check exception。
      

  18.   

    to:zcjl(假球迷:最爱米兰!)
    果然高!!但有两点俺认为...
    1 是checked exception,你还是错了,呵呵
    2 感觉你的checked exception不像checked exception -_-
    所有的Throwable其实都是运行时才发生的 The name RuntimeException is somewhat confusing. Of course, all of the errors we are discussing occur at run time.另外,“起跳违例”俺认为应该是个checked exception,只是派马龙上才导致runtime exception你的Error果然强!!俺是真球迷,最爱Roma,但前两天被Milan给菜了,不服!!!
      

  19.   

    其实我也想把犯规当作check exception,把违例当作runtime exception来说的
    但是仔细想想,check exception如果没有catch或是作更高一级的throws声明的话
    编译都不能通过,也就说,比赛就无法开始啊我认为,check exception就是那种编译器认为你的某些操作很可能会导致某些异常,所以强行要求你对此作出检查(check)和处理,否则,不会让你编译通过的。就像裁判自身也许并不认为马龙手上很不干净,但为了不引起球迷起哄等导致比赛不能进行下去的异常,他得让马龙作出一个不用肥肘作出伤害性动作的声明,并承诺出事了自己要付什么责任等等(^_^,这当然不是事实,我只是拿老邮差来开个玩笑而已,也当是为火箭出气)。所以,编译器就好比一个尽职的裁判,他预判到可能会有干扰比赛正常进行的因素(check exception),并要求球员(程序?)对此作出一些必要的check,否则,就不让比赛进行说到这里,突然想到其实犯规和违例也都算是check exception。因为这些nba事先规定好的,并专门派了三个裁判来作检查的工作。球员上场前虽然不用背诵规则,但有一点,他们都是默认这些规则的,否则就没有上场的资格(编译不通过?)。在比赛中,如果发生了犯规,那就是一个check exception产生了,裁判按预先制订的规则,记球员的犯规次数[、罚球]、对方获得控球权(catch块里的处理过程),然后让比赛继续进行(或是让该犯规的球员六犯下场)。呵呵,本来只是想说明check exception是一些可以预见、但必须给出处理声明的异常。如果处理得当的话,比赛还可以继续进行。用马龙的违例作为runtime exception的例子确实很不妥(其实我是想让老邮差用力过猛,导致上臂脱臼而不得不退出比赛的,后来觉得太过分了,所以换个温柔点的,没想到反而出错了,^_^)胡言乱语,只为博众君一笑to:Hodex(小何才露尖尖角) 
    罗马这个赛季的确很不错了,进攻有力,防守稳健,场面也好看
    如果不是米兰更出色的话,冠军奖杯理所当然应该是totti来举的,^_^其实罗马不能夺冠的原因是与米兰的四场比赛全输掉了
    不能不说是遗憾,就好像米兰本来应该进冠军杯决赛一样
      

  20.   

    zcjl(假球迷:最爱米兰!) 你那个比喻很确切编译器就好比一个尽职的裁判,但他却不能判断你的战术是否有错
    如:他不能说你派艾弗森防奥胖就是错误
    他也不能说你派一个伤员上场就是犯规(但大家都知道这些行不通,是你(程序员)的错误)
    还是怀念2001年的Roma
    AC Milan这赛季太Strong了,79分!!还有两轮!!!其实Roma比2001年不逊色,不过Milan丢掉冠军杯(0:4)也实在...呵呵,其实俺也是Milan Fan
    checked exception,not check exception,you failed again!! hehe~~
      

  21.   

    ^_^
    红黑米兰总是能让很多人喜欢!对checked exception的失误再次脸红 :(
      

  22.   

    说来说去
    checked exception 是假设你会出错,所以强制你去声明或catch它
    runtime exception 是假设你不会出错,那奥胖扣坏篮板应该算runtime exception吧
      

  23.   

    俺个人认为
    不应该理解checked exception强制你去声明或catch它
    而应该理解runtime exception是不应该去catch,因为它代表程序设计不合理奥胖扣坏篮板应该是个Error关于Exceptions还是得从实践中体会其用法,光是空谈是很难说明问题的
      

  24.   

    篮球中的runtime exception应该是这样滴~~~~Kobe带球上篮脚下一滑摔了一跤,原本十拿九稳的进球没了,这才是runtime exception,其他的一切违例犯规都该是checked
      

  25.   

    嘿嘿,突然又想到要使设计一个系统模拟篮球比赛怎样做会比较合理,我的方案是这样:public interface IUmpire {
        void checkAction(IStatus s) throws 犯规Exception,违例Exception;
    }public interface IPlayer {
        IStatus doAction();
    }
    然后使用observer模式配置,使umpire可以盯着player,毕竟,在篮球比赛里吹哨的是裁判,裁判抛出的都该是checked exception,而player抛的则是runtime exception或是error比如奥胖砸了篮板,比如player与umpire理论,比如player自己摔倒等
      

  26.   


    大鲨鱼果然名不虚传,轻松挤开防守他的队员,一记重扣!“咔嚓”,球进了,可怜的篮框也被300多磅重的鲨鱼生生给砸坏。由于出现了严重的error,比赛不得不暂时中止-----------------------------------------佩服的五体投地
      

  27.   

    to raimundo:
    "Kobe带球上篮脚下一滑摔了一跤,原本十拿九稳的进球没了" 我认为这不能算一个exception,因为其不会导致比赛的中断。
    说来说去好像我们真是在讨论篮球的规则了,呵呵
    可怜cyouyou(甘蓝) ,你平均每个赛季得两次五体投地了,(不过近两个赛季还好)呵呵
      

  28.   

    to  Hodex(小何才露尖尖角)
    后来想了一下,的确不算exception,改成kobe脚一滑,摔倒在地起不来了,被迫换人这才是runtime exception:)
    而且篮球比赛有规定,必须死球才可换人,裁判判断暂停换人就是把runtime exception转换成checked exception,类似于
    try {
    } catch (RuntimeException e) [
       throw translator(e);
    }
    交由统一异常处理器处理
      

  29.   

    可怜cyouyou(甘蓝) ,你平均每个赛季得两次五体投地了,(不过近两个赛季还好)呵呵
    希望下个赛季再接再厉
    ^_^
      

  30.   

    面授?
     onefox(一品狐) 有何高见?
    在下洗耳恭听