常见的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不⽤说,我们要⾃⼰捕捉。
nullpointerexception为什么异常
RuntimeException可以说见的最多了,下⾯我们说明⼀下常见的RuntimeException:
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;
}
NumberFormatException:继承IllegalArgumentException,字符串转换为数字时。
⽐如int i= Integer.parseInt("ab3");
ArrayIndexOutOfBoundsException:数组越界
⽐如 int[] a=new int[3]; int b=a[3];
StringIndexOutOfBoundsException:字符串越界
⽐如 String s="hello"; char c=s.chatAt(6);
ClassCastException:类型转换错误
⽐如 Object obj=new Object(); String s=(String)obj;
UnsupportedOperationException:该操作不被⽀持,如果我们希望不⽀持这个⽅法,可以抛出这个异常。既然不⽀持还要这个⼲吗?有可能⼦类中不想⽀持⽗类中有的⽅法,可以直接抛出这个异常。
ArithmeticException:算术错误,典型的就是0作为除数的时候。
IllegalArgumentException:⾮法参数,在把字符串转换成数字的时候经常出现的⼀个异常,我们可以在⾃⼰的程序中好好利⽤这个异常。这些异常⼀看到名字就知道是怎么回事了,其实只要理解了java的异常处理机制,这些都不是问题。