java异常捕获
来源:互联网 发布:手机壁纸设置软件 编辑:程序博客网 时间:2024/06/06 02:43
java异常捕获
一、代码实例,从代码看异常捕获(无捕获到catch异常,会继续往上抛)
package cn.hbut.test1;public final class A {public static void main(String[] args) {try{int a=1/0;int b[] = new int [2];System.out.println("开始执行赋值操作...");b[5]=10;}//即便有catch捕获,可与NullPointerException不符合catch(NullPointerException e){System.out.println("NullPointerException---"+e);}//数组交表越界异常catch(ArrayIndexOutOfBoundsException e){System.out.println("ArrayIndexOutOfBoundsException---"+e);}}}
上面的异常类型有两个:
1.int a=1/0; 会发生算术运算异常
2.b[5]=10; 由于初始化数组的大小为2,给下角标为5的数组赋值,会发生数组角标越界异常
运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at cn.hbut.test1.A.main(A.java:8)
at cn.hbut.test1.A.main(A.java:8)
分析异常:
1.第一个catch捕获的是NullPointerException(空指针异常),由于上面程序发生的第一个异常是 int a=1/0;
是一个算术异常,无法被该异常捕获处理,所以异常继续往上抛;第二个ArrayIndexOutOfBoundsException能否处理该算术异常呢?答案是否定的,异常会继续抛送给main方法,而main方法直接抛给java虚拟机了,java虚拟机无法处理该异常,程序直接中断了,抛出Exception in thread "main" java.lang.ArithmeticException: / by zero,
后面的程序System.out.println("开始执行赋值...");无法执行了;
二、代码实例2,从代码看异常捕获(有捕获到的异常,会处理)
package cn.hbut.test1;public final class A {public static void main(String[] args) {try{int a=1/0;int b[] = new int [2];System.out.println("开始执行赋值...");b[5]=10;}catch(ArithmeticException e){System.out.println("ArithmeticException---"+e);}//数组交表越界异常catch(ArrayIndexOutOfBoundsException e){System.out.println("ArrayIndexOutOfBoundsException---"+e);}}}
运行结果:
ArithmeticException---java.lang.ArithmeticException: / by zero
分析异常:
int a=1/0;异常被ArithmeticException捕获处理了,不过该处理仅仅是打印了一些异常信息,程序继续执行是否catch里面继续执行的,所以System.out.println("开始执行赋值...");该句无法执行
三、代码实例2,从代码看异常捕获(子异常在父异常之后是无法通过编译的)
package cn.hbut.test1;public final class A {public static void main(String[] args) {try{int a=1/0;int b[] = new int [2];System.out.println("开始执行赋值...");b[5]=10;}//后面的数组角标越界异常无法执行,因为父异常在前,已经执行,子异常无法通过编译catch(Exception e){System.out.println("ArithmeticException---"+e);int b[] = new int [2];System.out.println("开始执行赋值...");b[5]=10;}//数组交表越界异常catch(ArrayIndexOutOfBoundsException e){System.out.println("ArrayIndexOutOfBoundsException---"+e);}}}
分析:该代码无法通过编译器编译的,因为ArrayIndexOutOfBoundsException异常是Exception的子异常,在父异常之后的子异常是无法达的,所以编译器无法通过编译,更不用说运行了
分析异常:
0 1
- java异常捕获,统一捕获
- java多线程异常捕获
- java 线程异常捕获
- java 线程 捕获异常
- java 异常捕获注意事项
- java全局异常捕获
- java 多线程异常捕获
- java捕获线程异常
- Java多线程捕获异常
- java异常捕获问题
- Java异常捕获相关
- java异常捕获
- Java异常捕获
- java异常多级捕获
- Java中的异常捕获
- java捕获异常示例
- java多线程之捕获异常
- flex FaultEvent捕获java异常
- linux 编程问题
- 关于MSP430中断机制
- effect C++ 若不想使用编译器自动生成的函数,就该拒绝
- 1067. 试密码(20) PAT 乙级
- Linux文件特殊权限之set位权限和粘滞位权限
- java异常捕获
- 更改Ubuntu的语言
- Android权限
- 关于一些Vue的文章。(3)
- error: stray '\302' in program?
- 观察者模式
- 深入理解操作系统——第三章
- Ardunio菜鸟教程(三)
- 我的MVP学习之路