Java全家桶
集合
List
ArrayList
LinkedList
Set
Map
异常
异常的分类
Throwable、Exception、Error。Exception是可以被程序处理的异常,Error是不能被处理的错误,Exception又分别编译时Exception和运行时Exception,其中编译时Exception在代码调用处必须显示处理或抛出。
处理异常的最佳实现
- 涉及到外部资源的,要配合finally来释放资源;
- 在方法签名中声明异常要详细,不要直接抛出Exception或Throwable;
- 要再javadoc中提现异常信息;
- 正确描述异常信息,能够帮助快速定位问题,描述方式可以用特定类型的异常,也可以通过message来描述;
- 在编写处理异常的代码块时,要优先处理范围更小的特定异常;
- 不用吞掉异常,要记录、处理或抛出异常;
- 不要同时记录 并且 抛出异常,这会造成多个异常现场,不利益排查问题;
- 对于特定的模块、框架或工具,可以将异常统一包装成某个特定类型,方便统一处理和缩小排查问题的范围;
- 利用try...catch进行处理;
- 设置线程级别的异常处理器;
class MyUncheckedExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("捕获到异常。异常栈信息为:"); e.printStackTrace(); } thread.setUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
- 设置全局异常处理器;
Thread.setDefaultUncaughtExceptionHandler(new MyUncheckedExceptionHandler());
- 【Java全家桶】通过FutureTask将线程内异常传递到调用线程;
FutureTask
futureTask = new FutureTask<>(new Callable () { @Override public Integer call() throws Exception { System.out.println("子线程运行开始"); return 1 / 0; } });
- 对于一些比如基于spring mvc的web项目,一般会通过ExceptionHandler来处理异常;
推荐阅读
- java|动态规划刷题攻略(二)
- java|动态规划入门攻略(一)
- 1024程序员节|暴力匹配算法和KMP算法解决字符串匹配问题
- java|java多线程学习万字长文总结
- Java|Java 多线程 万字最详解
- java多线程|万字梳理java多线程的基础知识
- Java|Java多线程学习总结(全面的万字长篇)
- Java 8 判空新写法。。
- 舒服了,踩到一个关于分布式锁的非比寻常的BUG!