|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:Java的Exception分为两类,一类是RuntimeException及其子类,别的一类就是checkedException。Java请求函数对没有被catch处置失落的checkedException,必要将其写在函数的声明部分。但是,这一请求经常给程序员带来一些不用要的包袱。
为了不在函数声明中写throws部分,在Java项目内里经常能够看到以下代码用来‘吞失落’Exception:
这明显不是一个好的处置Exception举措,现实上,catch并处置一个Exception意味着让程序从产生的毛病(Exception)中恢复过去。从这类意义上说,已上的代码只大概在一些很复杂的情形下事情而不带来成绩。
关于良多Exception,常常没有去向理它并让程序从毛病中恢复出来的举措,这时候独一能做的事变大概就是在界面上显现一些提醒信息给用户。这类情形下让程序抛出碰到的Exception是更加公道的做法。但是,如许做会使得一些函数的声明急剧收缩。一个函数大概必要声明会抛出的7、8个checkedException,并且每一个挪用它的函数也必要一样的声明。
比这更糟的是,这有大概损坏类计划的open-close准绳。复杂来讲,open-close准绳是指当扩大一个模块的时分,能够不影响其现有的client。open-close准绳是经由过程承继来完成的,当承继一个类的时分,我们既扩大了这个类,也不会影响原本的client(由于对这个类没有修改)。
如今思索上面这类情形,有一个父类Base:
如今必要承继Base这个类偏重载foo这个办法,在新的完成中,foo大概抛出ExceptionB:
但是,如许写在Java内里是分歧法的,由于Java把大概会抛出的Exception看做函数特性的一部分,子类声明抛出的Exception必需是父类的子集。
能够在Base类的foo办法中到场抛出ExceptionB的声明,但是,如许就损坏了open-close准绳。并且,偶然我们没有举措往修正父类,好比当重载一个Jdk里的类的时分。
另外一个大概的做法是在Extend的foo办法中catch住ExceptionB,然后机关一个ExceptionA并抛出。这是个可行的举措但也只是一个权宜之计。
假如利用RuntimeException,这些成绩都不会存在。这申明checkedException并非一个很有用的观点,也意味着在程序计划的时分,我们应当让本人的Exception类承继RuntimeException而不是Exception。(这和JDK的倡议恰好相反,理论证实如许做代码的质量更好。)
关于那些必要处置checkedException的代码,能够使用一个ExceptionAdapter的类把checkedException包装成一个RuntimeException抛出。ExceptionAdapter来自BruceEckel的DoesJavaneedCheckedException这篇文章,在这里的ExceptionAdapter是我依据JDK1.4修正过的:
rethrow()的感化是把被包装的Exception再次抛出。
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。 |
|