Java 如何处理异常

Java 如何处理异常,java,exception,Java,Exception,我的问题是假设CalTransactionFactory未初始化或类不存在。然后我想捕捉那个异常并抛出一个异常。所以它应该在RuntimeException或Exception之下。下面是代码 try { calTransaction = CalTransactionFactory.create("PDS_GeoLocationService"); calTransaction.setName("GetLocationByIp"); calEvent=CalEventFactory.

我的问题是假设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());
}

catch(Exception e)
将捕获属于Exception子类的任何异常(几乎所有异常)

RuntimeException是一种异常类型。捕获的位置取决于create方法引发的异常类型。如果异常类型为或扩展RuntimeException,则将在此处捕获,否则将在异常中捕获。这就是问题所在吗

通常情况下,登录将重新引发异常的catch块是不好的做法


此外,如果它是RuntimeException,您不知道calTransaction是否已初始化,因此设置状态可能会导致NullPointerException。如果这是您试图避免的,您可以让它抛出某种类型的InitializationException,或者将其移动到以前的try/catch。

java.lang.ClassNotFoundException
是当JVM无法通过配置的类加载器找到类文件时抛出的。此异常扩展了
异常


java.lang.NullPointerException
是当变量为
null
并且有东西试图访问它时引发的异常。它扩展了
RuntimeException
,它扩展了
Exception

问题到底是什么?@declarer-如果我冒昧地解释我认为OP所问的问题,我相信他关心的是如何构造捕获,以便正确处理他遇到的异常。因此,答案。@Declarer:长度或琐碎性不是回答应该是回答还是评论的标准。唯一的标准应该是它是否回答了这个问题。“任何异常”->“任何可丢弃”?Nit:
ClassNotFoundError
在类链接期间JVM找不到类文件时抛出,而
ClassNotFoundException
是通过反射API发生等效事件时抛出的。@Athrawn17因此在我的情况下,我应该删除runtimeexception并仅使用异常捕获块?这取决于您的目标是什么。如果要记录具体原因,则会捕获要查找的具体错误。如果你想捕捉“世界”,那么catch(例外e)就可以了。