<b>冲破Java非常处理法例</b>[Java编程]
本文“<b>冲破Java非常处理法例</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Q: 我在我的利用程序中调用了外部办法并且想捕捉它大概抛出的非常.我能捕捉java.lang.Exception吗?
A: 通过一个给定的办法去处理全部运行时和检测非常关于预防外部错误是不充分的.
你可以去读目前 JavaWorld文章 – “Java Tip 134: When Catching Exception, Don’t Cast Your Net Too Wide”.这篇文章告诫了捕捉java.lang.Exception和java.lang.Throable是不好的.捕捉你能指定的非常关于代码的可保护性是非常重要的.但是这个法则依靠于特别的环境.假如你不打算你的程序崩溃并且保存你的数据构造的安全非常,那么你必须捕捉被抛出的真正的非常.
举个例子,想象你有一个加载了这个接口的服务器利用:
public interface IFoo
{
/**
* This method can't throw any checked exceptions...or can it?
*/
void bar ();
} // End of interface
关于给出参数的来由是让我们告诉你这样的服务在什么地方,并且差别的IFoo实现可以从外部资源加载上.你写以下代码:
try
{
IFoo foo = ... // get an IFoo implementation
foo.bar ();
}
catch (RuntimeException ioe)
{
// Handle 'ioe' ...
}
catch (Error e)
{
// Handle or re-throw 'e' ...
}
并且你在这个里处理了全部大概的非常.你不需求在这里加上任何捕捉java.io.IOException的非常,因为IFoo实现没有从IFoo.bar()中抛出它,对吗?(事实上,假如你加上了捕捉java.io.IOException非常块,编译器大概会把它作为不可到达的非常而丢弃)
错误.在我写的EvilFoo类中bar()办法证明了将抛出你传送给类构造器的任何非常:
public void bar ()
{
EvilThrow.throwThrowable (m_throwthis);
}
运行Main办法:
public class Main
{
public static void main (final String[] args)
{
// This try/catch block appears to intercept all exceptions that
// IFoo.bar() can throw; however, this is not true
try
{
IFoo foo = new EvilFoo (new java.io.IOException ("SURPRISE!"));
foo.bar ();
}
catch (RuntimeException ioe)
{
// Ignore ioe
}
catch (Error e)
{
// Ignore e
}
}
} // End of class
你将看到从bar()办法抛出的java.io.IOException非常实例并且没有任何捕捉块:
>java -cp classes Main
Exception in thread "main" java.io.IOException: SURPRISE!
at Main.main(Main.java:23)
以上是“<b>冲破Java非常处理法例</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |