try { FileInputStream in=new FileInputStream("/a.txt"); } catch (FileNotFoundException e) { throw new RuntimeException("file exception"); }
try { main(); // 不一定是main函数,这里只最上层的函数 } catch (RuntimeException e){ // 所有运行时异常在这里统一处理 System.out.println("handle RuntimeException error here"); } catch (Error e){ // 如果是junit异常,捕获并处理 if(e.getClass().toString().contains("junit")) { System.out.println("handle junit error here"); } else { // 如果不是junit异常,则一定是系统级异常,程序已经无法处理,抛出异常,终止程序 System.out.println("handle error here"); throw e; } }
异常是一个比较耗时的操作,异常性能差是因为fillInStackTrace方法,该方法是带锁的并且需要填充线程异常栈信息。 而我们的业务类异常是不需要记录异常栈的,可以考虑覆写fillInStackTrace方法减小性能开支(据说覆写该方法能提高10倍性能)。
class BizException extends Exception{ public BizException(String message) { super(message); } public Throwable fillInStackTrace() { return this; } }