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. 通过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

你可能感兴趣的:(java)