2012-03-09 121 views
0

我的问题是如果假设CalTransactionFactory未初始化或类不存在。然后,我想捕获该异常并抛出异常。所以它应该在RuntimeException或Exception之下。下面是代码如何处理异常

try { 
    calTransaction = CalTransactionFactory.create("PDS_GeoLocationService"); 
    calTransaction.setName("GetLocationByIp"); 
    calEvent=CalEventFactory.create("PersonalizationGeoLocationService"); 
    calEvent.setName("IPAddress"); 
    calEvent.addData("RemoteIP",ipAddress); 

    calEvent.completed();    

    calTransaction.setStatus("0"); 

} catch (RuntimeException re) { 
    calTransaction.setStatus(re); 
    getLogger().log(LogLevel.ERROR, "CAL is not initialized" +re.getMessage()); 
    throw re; 
} 
catch (Exception e) { 
    getLogger().log(LogLevel.ERROR, "CAL is not initialized" +e.getMessage()); 
} 
+2

究竟是什么问题? – talnicolas 2012-03-09 20:18:00

+0

看我的第一行。 – AKIWEB 2012-03-09 21:37:23

回答

0

catch(Exception e)将捕获任何异常是异常的子类(几乎全部)

+0

@deporter - 如果我冒昧地解释我认为OP的要求,我相信他会关心如何构建他的渔获以便妥善处理他所得到的例外。因此,答案。 – ggrigery 2012-03-09 20:24:56

+0

@deporter:长度或平凡度不是答案是答案还是评论的标准。唯一标准应该是*是否回答问题*。 – 2012-03-09 20:26:25

+0

“任何异常” - >“任何可投掷”? – 2012-03-09 20:30:52

0

RuntimeException的是一种类型的异常。它被捕获的位置取决于create方法抛出的异常的类型。如果异常的类型是或扩展了RuntimeException,它将在那里被捕获,否则它将在Exception中被捕获。这是个问题吗?

登录将重新抛出异常的catch块通常是不好的做法。

此外,如果它是RuntimeException,则不知道是否初始化了calTransaction,因此设置状态可能会导致NullPointerException。如果这是你想要避免的,你可以让它抛出一些InitializationException类型,或者将它移动到之前的try/catch。

1

java.lang.ClassNotFoundException是当JVM无法通过配置的类加载程序找到类文件时引发的。这个例外延伸到Exception

java.lang.NullPointerException是什么是当你的变量是null和什么都试图访问它。它延伸RuntimeException,延伸Exception

+0

Nit:当JVM在类连接期间找不到类文件时抛出'ClassNotFoundError',并且'ClassNotFoundException'是当通过反射API发生等价事件时抛出的。 – 2012-03-09 20:29:55

+0

@ Athrawn17所以在我的情况下,我应该删除runtimeexception并只使用异常catch块? – AKIWEB 2012-03-09 21:32:39

+0

这取决于你的目标是什么。如果你想记录具体的原因,你会发现你正在寻找的具体错误。如果你想抓住“世界”,那么赶上(例外e)将做到这一点。 – Athrawn17 2012-03-09 21:49:18