Dev*_*ked 3 java performance exception
我有一个方法,它将异常作为特定方法的参数.此方法需要根据异常类型执行不同的逻辑.在以下两种处理方式之间..什么是最有效的方式(有第三种更好的方式)..以及为什么
public void processException(Exception ex) {
try {
throw ex;
} catch(CustomException e1) {
//do something
} catch (CustomException2 e2) {
//do something else
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public void processException(Exception ex) {
if (ex instanceof CustomException) {
// do something
} else if (ex instanceof CustomException2) {
// do something else
}
}
Run Code Online (Sandbox Code Playgroud)
除了效率之外,第二种方式是首选方式,因为例外不会在非特殊情况下抛出."调度"的第一种方法是在常规控制流中使用异常抛出,这使得读取程序变得更加困难.
此外,这两个方法并不相同:第一个程序必须声明为抛出一个已检查的异常,因为并非所有子类都由catch块处理.
如果您正在处理程序定义的自定义异常,那么您可以避免检查子类型:因为Exception对象是常规类,您可以向它们添加包可见方法,并让它们实现包含可见性的包.方法.然后异常将覆盖该方法,允许您使用常规的"虚拟"分派,而不是在运行时检查确切的类类型.
以下是此方法的示例:假设您希望将异常写入日志文件.你可以这样做:
interface LoggableException {
void logToFile();
}
public class CustomExceptionOne extends Exception implements LoggableException {
...
public void logToFile() {
// Do something
}
}
public class CustomExceptionTwo extends Exception implements LoggableException {
...
public void logToFile() {
// Do something else
}
}
public void processException(Exception ex) {
if (ex instanceof LoggableException) {
LoggableException lEx = (LoggableException)ex;
lEx.logToFile();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |