异常学习一

异常的体系结构

 java.lang.Throwable

  --Error:错误,程序中不进行处理

  --Exception:异常,要求在编写程序时,就要考虑对这些异常进行处理

    --编译时异常(RuntimeException之外的):在编译期间出现的异常(运行javac命令时,出现的异常)

    --运行时异常(RuntimeException):在运行期间出现的异常(运行java命令时,出现的异常)

当执行一个程序时出现异常,异常之后的代码将不会再执行

常见的运行时异常

 1.数组下标越界的异常 ArrayIndexOutBoundsException 

 public void test2(){   int[] i=new int[10];   System.out.println(i[10]);  } 

2.算术异常  ArithmeticException 

 public void test3(){   int i=10;   System.out.println(i/0);  }

 3.类型转换异常 ClassCastException

 public void test4(){   Object obj=new Date();   String str=(String) obj;  }  

4.空指针异常  NullPointerException

 public void test5(){   String[] names=null;   System.out.println(names[0]);   String str=new String("jack");   System.out.println(str.length());  }  

如何处理异常

Java提供的异常处理的抓抛模型

1、抛:当执行代码时,一旦出现异常,就会在出现异常的代码处生成一个对应的异常对象,并将次异常对象抛出(自动抛出和手动抛出)

  一旦抛出异常对象,接下来的代码将终止运行。此异常对象将抛给方法的调用者。

2、抓:抓住上一步抛出的异常对象。(异常处理方式)

  Java提供了两种异常处理方式

  异常处理方式一:

  try{

    可能出现异常的代码

  }catch(Exception e){

    处理方式

  

  }finally{

    一定要执行的语句块

  }

  注:

  1、try内声明的变量相当于局部变量,除了try语句块即失效

  2、finally语句块是可选项可加可不加

  3、一个try可以配有多个catch语句块。catch中如果多个异常是并行关系不分先后顺序;如果catch中异常存在父子关系,子类一定要写在父类的上面,否则会报错;

  4、当try中出现异常时,该异常会从上往下顺序与catch的异常类型进行匹配,匹配成功后执行该catch块后,跳过后面的catch直接执行finally语句块

  5、finally语句块一定会被执行

  *运行时异常可以不进行显式的处理,但编译时异常必须进行显式的处理

  

  异常处理方式二:

  在方法的声明处显式的抛出该异常的类型

  语法:public static void method() throws FileNotFoundException,IOException

  在此方法内部出现异常时,会抛出一个异常对象给方法的调用者,由方法的调用者进行处理,异常可以逐级向上抛

猜你喜欢

转载自www.cnblogs.com/qust-lgh/p/10306072.html