zoukankan      html  css  js  c++  java
  • Java异常处理的方法

    1、异常概述
    在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控制范围的环境因素,如用户的坏数据、试图打开一个根本不存在的文件等。在Java中这种在程序运行是可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。
    2、捕捉异常
    Java语言的异常捕获结构由try、catch和finally3部分组成。其中,try语句块存放的是可能发生异常的Java语句;catch程序块在try语句之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论try语句块中的代码如何退出,都将执行finally语句块。
    语句如下:
    try{
    //程序代码块
    } catch(Exceptiontype1 e){
    //对Exceptiontype1的处理(如:e.getMessage();)
    } catch(Exceptiontype2 e){
    //对Exceptiontype2的处理
    }
    ...
    finally{
    //程序块
    }
    使用try-catch语句进行异常处理时,程序不会因为异常而终止。当try代码块中的语句发生异常是,程序就会跳转到catch代码块中执行,执行完catch代码块中的程序代码后,将继续执行catch代码块后的其他代码,而不会执行try代码块中发生异常语句后面的代码。
    Java的异常处理时结构化的,不会因为一个异常影响整个程序的执行。
    注:
    Exception是try代码快传递给catch代码块的变量类型,e是变量名。catch代码块中语句“e.getMessage();”用于输出错误性质。通常,异常处理常用以下3个函数来获取异常的有关信息:
    getMessage()函数:输出错误性质。
    toString()函数:给出异常的类型与性质。
    printStackTrace()函数:支出异常的类型、性质、栈层次以及出现在程序中的位置。
    3、抛出异常
    1.使用throws关键字抛出异常
    throws关键字通常被应用在生命方法时,用来指定方法可能抛出的异常。多个异常可使用逗号分隔。
    如:
    public class Shoot{//创建类
    static void pop() throws NegativeArraySizeException{//定义方法并抛出异常
    int[] arr = new int[-3];//创建数组
    }
    public static void main(String[] args){//主方法
    try{
    pop();
    //调用pop()方法
    } catch (NegativeArraySizeException e){
    System.out.print("pop()方法排除的异常");//输出异常信息
    }
    }
    }
    运行结果:
    pop()方法抛出的异常
    使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。
    2.使用throw关键字抛出异常
    throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句是立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要再抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常;如果要捕捉throw抛出的异常,则必须使用try-catch语句块。
    如:
    public class MyException extends Exception{//创建自定义异常类
    String message;
    public MyException(String ErrorMessagr){//父类方法
    message = ErrorMessagr;
    }
    public String getMessage(){//覆盖getMessage()方法
    return message;
    }
    }
    public class Captor{//创建类
    static int quetient(int x,int y)throws MyException{//定义方法抛出异常
    if(y < 0){
    throw new MyException("除数不能是负数");//异常信息
    }
    returm x/y;//返回值
    }
    public static void main(String args[]){
    try{
    int result = quetient(3,-1);
    }catch (MyException e){
    System.out.print(e.getMessage());//处理自定义异常
    }catch (ArithmeticException e){

    System.out.print("除数不能为0");//处理ArithmetticException异常
    }catch (Exceotion e){
    System.out.print("程序发生了其他的异常");//处理其他异常
    }
    }
    }
    上述实例使用了多个catch语句来捕捉异常。由于Exception是所有异常类的父类,如果将catch(Exception e)代码块放在其他两个代码块的前面,后面的代码块将永远得不到执行,所以catch语句的顺序不可调换。
    4、运行时异常和一般异常
    RuntimeException异常是程序运行过程中产生的异常。Java类库的每个包中都定义了异常类,所有的这些类都是Throwable类的子类。Throwable类派生了两个子类,分别是Exception和Error类。Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。
    Exceotion类有根据错误发生的原因分别为运行时异常(RuntimeException)和一般异常(CheckedException)。对于后者,即一般异常,Java要求我们必须对其进行try-catch或者throws处理;而对于运行时异常我们可以不处理。这样的异常由虚拟机接管。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码为止。如果不对运行时异常进行处理,那么出现运行时异常后,要么是线程终止,要么是主程序终止。对于运行时异常,一般不建议再程序中进行捕获处理,防止再程序的运行中掩盖错误使其无法被察觉。
    5、Java常见异常
    常见RuntimeException异常:
    NullPointerException空指针异常
    ArrayIndexOutOfBoundsException数组下表越界异常
    ArithmeticExceotion算数异常
    ArratStoreException数组中包含不兼容的值抛出的异常
    IllegalArgumentException非法参数异常
    SecurityException安全性异常
    NegativeArratSizeException数组长度为负异常
    更多常见异常:
    NumberFormatException数字格式异常
    UnsupportedOperationException不支持的操作异常
    ClassCastException类型转换异常
    ClassNotFoundException未找到相应类异常
    SQLException操作数据库异常
    NoSuchFielException字段未找到异常
    NoSuchMethodException方法为找到抛出的议程
    StringIndexOutOfBoundsException字符串索引超出范围抛出的异常
    IOException输入输出异常
    IllegalAccessException不允许方位某类异常
    InstantiationException当应用程序试图使用Class类中的newInstance()方法穿件一个类的实例,而指定的类对象无法被实例化是,抛出该异常
    EOFException文件已结束异常
    FileNotFoundException文件未找到异常
    NumberFormatException数字格式异常

    UnsupportedOperationException不支持的操作异常
    ClassCastException类型转换异常
  • 相关阅读:
    队列与双向队列

    linux nohup, jobs, fg, tail指令 指令前后台切换
    linux shell
    Linux学习笔记四 grep, sed, awk
    面试要求
    jenkins send files or publish
    mysql导入脚本
    第三方接口调用框架
    pdm文件name与comment互相同步
  • 原文地址:https://www.cnblogs.com/sonofdemon/p/9943660.html
Copyright © 2011-2022 走看看