- 异常捕获,其本质就是程序员希望有一个if...else代码块,可以将影响程序运行的情况包括进去:
if(发生了影响程序运行的事件){ 执行处理该事件的应对方法 }else{ 程序正常运行 }
由此,我们就可以有对异常捕获的基本认识
-
java中异常捕获和处理可以用try..catch代码块来实现,把可能发生异常的代码放在try中,一单代码发生异常,系统就会跑出一个异常对象,并且把这个异常对象交由catch代码块来处理。
-
应该注意的细节:
-
无论是try还是catch代码块,其花括号{}在任何情况下都是不可省略的,这一和if不同,if在执行的代码只有一行的时候可以省略花括号,try和catch不行
-
在try中声明的变量,只有在try代码块中才可以使用,在catch中是不可以使用的。
-
一个try可以对应多个catch,系统会根据抛出来的异常一次匹配这些异常,直到怕匹配到抛出的异常种类和catch的异常种类相同或者抛出的异常是catch的异常的子类异常时停下,并执行对应的catch的代码逻辑
-
常用的异常捕获种类有:
-
IndexOutOfBoundsException:数组越界异常,java运行时将调用(比如说声明了长度为2的数组a,却使用了a[2]的时候)
-
NumberFormatException:数字格式异常,当输入的是字母而不是一个数字的时候调用
-
ArithmeticException:算术异常,当分母为零的时候调用
-
NullPointException:空指针异常,当视图调用一个bull对象的实例方法或者实例变量的时候调用
-
在java7之后,可以使用一个catch块来捕获一种以上的异常,使用方法是在两个异常类名之间加 | 来分割
-
-
以下为上述知识点的代码示例
//需要注意的是,try和catch的{}是不能省略的,即使花括号里面只有一行代码 //还有,try中声明的变量只有在try中可以使用,在catch是不可以使用的 package KnowIt; import java.rmi.server.ExportException; import java.util.EmptyStackException; public class SimpleExample { public static void main(String args[]){ int a[] = new int[2]; a[0] = 1; try { int test = 12; a[2] = 9; }catch (NumberFormatException | IndexOutOfBoundsException e1){ // 这个异常是当输入的参数不是数字,而是字母的时候调用(也就是需要一个数字,却输入了一个字母) // test = 1; // 这一句是会报错的,因为catch无法访问try声明的变量 System.out.println("数字格式异常或者数组越界异常"); }catch (ArithmeticException e2){ // 这个异常是当分母为零的时候调用 System.out.println("算术异常"); }catch (EmptyStackException e3){ // 这个异常是当数组越界的时候调用 // System.out.println("数组越界异常"); // 程序最终输出数组越界异常,说明java是依次匹配各个捕获的异常,知道找到类型匹配的异常就 // 停下 }catch (Exception e4){ // 所有异常的父类 System.out.println("异常"); } } } //输出结果为 // 数字格式异常或者数组越界异常
//空指针异常发生在视图调用一个null对象的实例方法或者实例变量的时候 package KnowIt; import java.util.Date; public class NullPointException { public static void main(String args[]){ Date d = null; try{ System.out.println(d.after(new Date())); }catch (NullPointerException ne){ System.out.println("空指针异常"); }catch (Exception e){ System.out.println("未知异常"); } } }
这是我看李刚编著的《疯狂Java讲义》后总结出来的。
-
java异常处理(1) 异常捕获代码实例和常见的异常捕获种类
最新推荐文章于 2024-08-13 08:14:42 发布