Java全家桶

Java全家桶
集合 List ArrayList LinkedList Set Map 异常 异常的分类 Throwable、Exception、Error。Exception是可以被程序处理的异常,Error是不能被处理的错误,Exception又分别编译时Exception和运行时Exception,其中编译时Exception在代码调用处必须显示处理或抛出。
处理异常的最佳实现

  1. 涉及到外部资源的,要配合finally来释放资源;
  2. 在方法签名中声明异常要详细,不要直接抛出Exception或Throwable;
  3. 要再javadoc中提现异常信息;
  4. 正确描述异常信息,能够帮助快速定位问题,描述方式可以用特定类型的异常,也可以通过message来描述;
  5. 在编写处理异常的代码块时,要优先处理范围更小的特定异常;
  6. 不用吞掉异常,要记录、处理或抛出异常;
  7. 不要同时记录 并且 抛出异常,这会造成多个异常现场,不利益排查问题;
  8. 对于特定的模块、框架或工具,可以将异常统一包装成某个特定类型,方便统一处理和缩小排查问题的范围;
并发中的异常处理 异常的范围是线程,如果在一个线程中抛出了异常,这个线程就会中断。
  1. 利用try...catch进行处理;
  2. 设置线程级别的异常处理器;
    class MyUncheckedExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("捕获到异常。异常栈信息为:"); e.printStackTrace(); } thread.setUncaughtExceptionHandler(new MyUncheckedExceptionHandler());

  3. 设置全局异常处理器;
    Thread.setDefaultUncaughtExceptionHandler(new MyUncheckedExceptionHandler());

  4. 【Java全家桶】通过FutureTask将线程内异常传递到调用线程;
    FutureTask futureTask = new FutureTask<>(new Callable() { @Override public Integer call() throws Exception { System.out.println("子线程运行开始"); return 1 / 0; } });

  5. 对于一些比如基于spring mvc的web项目,一般会通过ExceptionHandler来处理异常;
IO 并发 JVM

    推荐阅读