参考链接: 了解Java中的数组IndexOutofbounds异常
异常
继承体系
查看Throwable的描述 可知他有两个子类,分别是Exception和error。 其中Exception异常是要求程序对产生的异常进行处理,不处理的话程序将会结束运行。常见形式为(XxxException)。 Error错误一般指和虚拟机有关的错误,如系统崩溃,动态链接失败等,错误无法恢复或不能捕获,发生在JVM中,如开辟过大的数组空间导致内存溢出。常见形式为(XxxError)。 Exception下还有一个特殊子类,RuntimeException运行时异常
异常产生过程
例子如下,产生ArrayIndexOfBoundsException异常
throw 抛出异常
使用格式: throw new 异常类名(参数) 如ArrayIndexOutOfBoundsException异常 使用上面的方法可以自行定义异常信息,如:
throw new ArrayIndexOutOfBoundsException("索引超出范围");
throws 声明异常
如果方法内通过throw抛出的异常,没有进行捕获处理,那就要通过throws进行声明,让调用者处理。
class Demo {
public void test() throws Exception {
if(x > 0) {
throw new Exception();
}else {
system.out.println("test");
}
}
}
异常捕获 try…catch…fianlly
格式如下
try {
//需要被检测得语句
} catch {
//异常处理语句
} finally {
//一定被执行的语句
}
其中,try块是必须的,catch和finally块都是可选的,但try后必须出现其中一个,或同时出现两个。 finally块:一般用来释放物理资源,除非try块或catch块调用如System.exit(1)退出虚拟机,否则finally块总会被执行。还有最后不要在finally块最后加入return语句,因为当try块或catch块中遇到return或throw使,系统执行这两个语句不会结束该方法,而是去寻找流程是否有finally块,有的话执行,如果其中finally块包含return语句,则程序退出,不会再执行try块或catch块中任何代码。
运行时异常
RuntimeException及其子类如:NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时异常。 特点:
方法抛出运行时异常,无需定义throws声明,调用者也无需处理。运行时期异常发生后,需要程序员进行代码修改。
异常在方法中的重写细节
子类覆盖父类方法时,如果父类方法声明异常,则子类只能声明父类异常或该异常的子类,或不声明。 当父类被覆盖的方法没有异常声明时,子类覆盖方法无法声明异常,即不可用throws声明,只能catch捕获,或是在catch中抛出RuntimeException。 所以通常建议使用Runtime异常。
异常中的常用方法
方法如下 都是用来返回关于异常的信息
自定义异常
当需要自定义异常类时,让类继承Exception或RuntimeException即可
Class 异常名 extends Exception {
//无参构造器
public 异常名() {
}
//带一个字符串参数的构造器
public 异常名(String s) {
super(s);
}
}
如果继承的是Exception的话,必须用throws声明,而后进行捕获。例
class Exp extends Exception {
Exp() {
super();
}
Exp(String s) {
super(s)
}
}
class Test{
private int a;
Test(int a) throws Exp {
if(a > 0) {
throw new Exp(a + "大于0");
}
this.a = a;
}
}
class Exp {
public void static mian(String[] args) {
try {
Test t = new Test(8);
}catch(Exp ex) {
Sysotem.out.println(ex.getMassege());
}
}
}
总结
异常基本操作
创建异常对象抛出异常处理异常(不一定会产生异常),如果产生就进行处理
常见异常
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。