关于runtimeException异常

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:该操作不被支持,如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。


转自:http://www.java3z.com/cwbwebhome/article/article8/806.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值