码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA异常

时间:2018-06-23 13:12:25      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:ima   方法   java   public   要求   传递   reac   row   ati   

异常就是JAVA代码在运行时期发生的问题,在JAVA中,把异常信息封装成一个类,当出现了问题时,就会创建异常对象 并抛出相关信息(如异常出现的位置、原因等)

一、异常的继承体系

在JAVA中使用Exception类来描述异常

public class Exception extends Throwable

Exception 类是及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。

查看API中的Exception的描述,Exception类及其子类是Throwable的一种形式,它用来表示JAVA程序可能产生的异常,并要求对产生的异常进行合理的处理。Exception有继承关系,它的父类是Throwable ,Throwable是JAVA中所有错误和异常的超类。

Throwable有两个已知子类:

lang.Error 错误类,错误在编辑时期是不会出现的,一般在运行时期出现,

lang.Exception 异常类 -->Exception下还有个子类叫RuntimeException 运行时异常

public static void main(String[] args){

int[] array = {1,2,10};

System.out.println(getArray(array));

}

public static int getArray(int[] arr){
        int i = arr[3];
        return i++;
    }

异常是如何抛出的

当JVM检测到有异常出现时,

1. 创建了异常对象 new ArrayIndexOutOfBroundsException(3),在构造器中输入异常的索引

2. JVM在方法中找处理异常的方法,找不到时则将异常的对象进行抛出,抛给方法的调用者(谁调用,抛给谁)main方法

注意:一旦异常抛出了,后面所有代码都不再执行

3. main方法接收到这个异常后,main也没有对这个异常的处理方法,所以main也将这个异常抛给调用main方法的调用者:jvm虚拟机。

注意:当main抛出异常后,后面所有的代码都不再执行

4. JVM收到异常后,将信息输出到控制台,将程序结束运行

二、抛出异常throw,方法中声明异常:throw new Exception(String 异常信息), 在方法()和{}之间,用throws Exception抛给调用者

在编写程序时,我们必须要考虑程序出现问题的情况,比如在定义方法时,方法需要接收参数,那么,当调用方法使用接收到的参数时,首先需要对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使出抛出异常来告诉调用者。

在JAVA中,提供了一个throw关键字,它用来抛出一个指定的异常对象,抛出异常是如何操作的呢?

1. 创建一个异常对象,封装一些提示信息。

2. 将这个异常对象抛给调用者,将结束当前方法的执行。

格式:throw new 异常类名称(参数);

public static void main(String[] args) {
        int[] arr = null;
        getArray(arr);
        
    }
    //将数组最后一个索引*2返回
    public static int getArray(int[] array){
        int i = array[array.length-1];
        return i*2;
    }

如上例,将一个空的数组作为参数传入,则会出现空指针异常,所以需要在方法内部对传入的数据进行合法性的判断

public static int getArray(int[] array){

  //如果传入数组为int arr = null 时

  if(array==null){

    //抛出异常,throw,throw必须写在方法的内部,用于抛出异常对象,throw后面的内容必须要写new出来的异常的对象(Exception或其子类)

    throw new Exception("传递的数组不存在");

  }

  //如果传入数组int[] arr = {}长度为0时

  if(array.length<1){

    throw new Exception("数组长度为0");

   }

  int i = array[array.length-1];
      return i*2;

}

注意:方法中声明的异常,如上例throw new Exception(),表明此方法可能出现异常,还应用throws关键字抛给调用者

public static int getArray(int[] array)throws Exception{} 

这样就把异常抛给了main方法

如果main处理不了,再在main方法把这个异常抛给jvm

public static voie main(String[] args)throws Exception{}

当调出了一个带有抛出异常的方法时,调用者必须要处理可能出现的异常,当然抛给JVM也是一种处理。

三、异常的处理方式

try...catch...finally...

try{

  \\被检测的代码,可能出现异常的代码

}catch(异常类名 变量名){

  \\异常的处理方式

}finally{

  \\必须要执行的代码

}

技术分享图片

 四、多catch的注意事项

多catch捕获异常,异常类之间是有先后顺序的。

1. 平级之间,没有继承关系的,谁先谁后都没关系

2. 如果出现上下级关系的异常,越是父类的异常越是写到最后,级别越低的写前面。

catch(NullPointerException ex){}

catch(Exception ex){}

顺序错误会报错:unreachable 有永远执行不到的代码

五、finally代码块

1. finally内的代码,无论是否有异常,都必须执行

2. 只有一种情况不执行:在catch中,关闭了虚拟机System.exit(0);

3. finally的作用,用于释放资源,如读写IO流时,无论读写是否成功,都应该释放资源

技术分享图片

 

JAVA异常

标签:ima   方法   java   public   要求   传递   reac   row   ati   

原文地址:https://www.cnblogs.com/java-demo/p/9216705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!