关于RuntimeException异常

上一篇 / 下一篇  2015-03-28 00:47:25 / 天气: 晴朗 / 心情: 高兴 / 个人分类:JAVA

 Java中采用了强制异常捕捉机制,这样一方面提高了程序的可靠性,不过有时候也带来一些麻烦。比如:
int i= Integer.parseInt("33");
这个我知道它不可能会抛出异常,但是不捕捉异常的话就过不了编译这关,当然这个代码没有意义的。

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

2.Exception:这个属于应用程序级别的异常,这类异常必须捕捉。
3.RuntimeException:奇怪RuntimeException继承了Exception,而不是直接继Error, 这个表示系统异常,比较严重。

java中异常分两类,一类是需要处理的(Checked exceptions), 一类是不需要处理的(Unchecked exceptions)。
是否需要处理是指:你程序中抛出的异常客户端是否需要处理,是否有能力处理。

    以用户注册来说明,每个用户有一个唯一的注册名,当用户提交注册信息时,从后台检测这个注册名已经存在,违反唯一性,这时候你可以抛出一个checked exception,上层程序可以捕获这个异常,并将信息提示给用户,让用户换个注册名;
如果在用户提交注册信息时,正好你的数据库宕掉了,无法对数据进行存取,这时候你就要抛出unchecked exception(例如你自定义的继承于runtimeexception的异常),这个异常上层程序无须捕获,或者说捕获了除了继续向外抛以外也无能为力。

如果一方法有可能引发Exception子类对象表示的异常,那就应该在此方法中捕获处理这些异常或抛弃这些异常。如IOException类和FileNotFoundException类的异常。

   但是,RuntimeException类的子类表示的异常是无需这样做的,而我们遇到的很多异常都是RuntimeException类的子类表示的异常。

IOException类异常对象举例:
import java.io.*;
class second_exception {
  public static void main(String arg[]){
    System.in.read(); //此处必须捕捉IOException异常,否则将无法编译。
    System.out.println("4444444444");
  }
}

正确的写法是:
import java.io.*;
class second_exception {
  public static void main(String arg[]){
    try{
       System.in.read();
    } catch(IOException e){
       System.out.println("4444444444");
    }
  }
}

RuntimeException类的一些子类:

1、ArithmeticException:无效的算术运算情况引起的异常。

2、IndexOuterOfBoundsException(它有两个子类:ArrayIndexOuterOfBoundsException、StringIndexOuterOfBoundsException):超出应用对象边界下标。

举例1:

class first_exception {
  public static void main(String arg[]){
  int aa[]={10,100,1000};
  System.out.println(aa[5]); //此处将抛出ArrayIndexOuterOfBoundsException异常
}

}

举例2:

class first_exception {
public static void main(String arg[]){
  String aa=new String("123456789");
  System.out.println(aa.charAt(14)); //此处将会抛出StringIndexOuterOfBoundsException异常
 }

}

3、NegativeArraySizeException:试图定义大小为负值的数组。

举例:

class first_exception {
public static void main(String arg[]){
int aa[];
aa=new int[-3]; //此处将抛出NegativeArraySizeException异常
aa[0]=10;
aa[1]=100;
aa[2]=1000;
System.out.println(aa[1]);
}

}

4、NullPointerException:使用的对象是NULL的。举例:

class first_exception
{
  public static void main(String arg[]){
   String aa=new String("111");
   if(arg[0].equals(aa)){ //此处如果返回true,则会报错抛出NullPointerException异常
    aa=null;
    }
    System.out.println(aa.toString());
  }
}

5、ClassCastException:强制转换为无效的类型。

6、IllegalArgumentException(它有两个子类:IllegalThreadStateException、NumberFormatexception):方法参数错误。

举例1:

class first_exception {
  public static void main(String arg[]){
  int aa=55;
  System.out.println(Double.valueOf("aaa")); //此处抛出IllegalArgumentException的子类NumberFormatException异常
  }
}

7、SecurityException:略

8、IllegalMonitor:略

9、StateException:略

10、IllegalStateException:略

11、Unsupported:略

12、OperationException:略

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


TAG:

 

评分:0

我来说两句

Open Toolbar