常见的RuntimeException

Java中采用了强制异常捕捉机制,这样一方面提高了程序的可靠性,不过有时候也带来一些麻烦。比如:

int i= Integer.parseInt("33");

这个我知道它不可能会抛出异常,但是不捕捉异常的话就过不了编译这关,当然这个代码没有意义的。

Java中所有异常或者错误都继承Throwable,我们把它分为三类吧:

1.Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码不合法等。

2.Exception:这个属于应用程序级别的异常,这类异常必须捕捉。

3.RuntimeException:奇怪RuntimeException继承了Exception,而不是直接继Error,  这个表示系统异常,比较严重。

Error我们很少遇到,但是并不是说Error就一定非常致命,举个例子,NoSuchMethodError表示没有这个方法,你调用的方法不存在,你一定觉得奇怪,不存在怎么编译的过去呀?很简单的,你先编译好一个被调用的类A,给一个方法。然后在你的程序调用它,编译没问题,运行也没问题。现在再把A类中这个方法去掉,重新编译一遍,你再运行你的程序就知道错误是怎么回事了。

Exception不用说,我们要自己捕捉。

RuntimeException可以说见的最多了,下面我们说明一下常见的RuntimeException:

1)NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。

String s=null;

boolean eq=s.equals(""); // NullPointerException

这里你看的非常明白了,为什么一到程序中就晕呢?

public int getNumber(String str){

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

这个方法就有可能抛出NullPointerException,我建议你主动抛出异常,因为代码一多,你可能又晕了。

public int getNumber(String str){

if(str==null) throw new NullPointerException("参数不能为空");

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

2)NumberFormatException:继承IllegalArgumentException,字符串转换为数字时。

比如:

int i= Integer.parseInt("ab3");

3)ArrayIndexOutOfBoundsException:数组越界

比如:

 int[] a=new int[3];

 int b=a[3];

4)StringIndexOutOfBoundsException:字符串越界

比如 :

String s="hello"; 

char c=s.charAt(6);

5)ClassCastException:类型转换错误

比如 :

Object obj=new Object(); 

String s=(String)obj;

6)UnsupportedOperationException:该操作不被支持。

如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。

7)ArithmeticException:算术错误,典型的就是0作为除数的时候。

8)IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常。

这些异常一看到名字就知道是怎么回事了,其实只要理解了java的异常处理机制,这些都不是问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,449评论 18 399
  • 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?答:可以有多个类,但只能有一个publ...
    岳小川阅读 4,509评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,833评论 19 139
  • 在经过一次没有准备的面试后,发现自己虽然写了两年的android代码,基础知识却忘的差不多了。这是程序员的大忌,没...
    猿来如痴阅读 8,054评论 3 10
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,946评论 0 62

友情链接更多精彩内容