你过于担心RuntimeException了吗?

RumtimeException是一种UncheckedException。

UncheckException是一种不需要在方法签名中声明的异常类型。广为知道的RuntimeException的子类有NullPointerException,StringOutOfBoundsException。ArrayIndexOutOfBoundsException之类的。在代码运行的过程中由于变量为空或者数组越界等情况就会发生这种异常。当异常发生的时候,由于没有try-catch会产生程序意外退出的情况。为了避免发生这种异常而导致应用程序意外退出,需要对代码进行try-catch或者是在调用前进行非空判定或者是长度判定。

常见的情况如下:

下面是关于非空判定的例子

1 User user = getUser(userId);
2 if (user != null) {
3     System.out.println(user.getName());
4 }

下面是关于数组越界的判定

1 String[] codes;
2 
3 public String getNextCode(int index) {
4     if ((index++) > codes.size()) {
5         index = 0;
6     }
7     return codes[index];
8 }


NullPointerException的规避方法,之前的例子已经讲过了NullObjectPattern。

而数组越界则可以通过下列方法来判定

1 String[] codes;
2 
3 public String getNextCode(int index) {
4     return codes[(index ++) % codes.size()];
5 }


如果你在开发的是一个Web应用程序,你应该准备一个出错页面,并且在出现Exception的时候将页面定向转到该页面去。

如果你在开发的是一个C/S应用程序,或者是StandAlone的应用程序,你应该准备一个出错对话框,并且在发生问题的时候提示用户具体出现的错误。

如果在开发一个Android应用程序,你应该忽略发生的问题,因为Android系统会抓住相关的错误,并且出现一个对话框提示系统出现错误,并且会根据情况自动恢复应用程序的运行。(如果应用程序是Home,输入法等需要常驻内存的程序)

更为重要的是相关的Exception是怎么发生的,怎么才能够规避。发生Exception应该记录相关Log,通过相关Log找到相关Exception发生的原因,这样就可以从根本上去消除问题。

规避类似问题的方法最好的方法是让问题永远不会发生。

1. NullObjectPattern

2. 数组下标通过计算使之不越界。

3. 对数组遍历时尽量避免采用下标。(会有性能问题...)

 

Java语言中的UncaughtException并不能够帮助把未抓到的Exception抓到后进行合适的处理。

posted @   史蒂芬.王  阅读(1608)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示