zoukankan      html  css  js  c++  java
  • java异常处理

    异常概述

      在程序中,错误可能产生于程序员没有预料到的各种情况,或者是超出了程序员可控制范围的环境因素,如用户的坏数据、试图打开一个根本不存在的文件等。在Java中这种在程序运行是可能出现的一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。

    捕捉异常

      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()函数:支出异常的类型、性质、栈层次以及出现在程序中的位置。

    抛出异常

    • 使用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关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。



    • 使用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语句的顺序不可调换。

    • 运行时异常和一般异常。RuntimeException异常是程序运行过程中产生的异常。Java类库的每个包中都定义了异常类,所有的这些类都是Throwable类的子类。Throwable类派生了两个子类,分别是Exception和Error类。Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。
    • Exceotion类有根据错误发生的原因分别为运行时异常(RuntimeException)和一般异常(CheckedException)。对于后者,即一般异常,Java要求我们必须对其进行try-catch或者throws处理;而对于运行时异常我们可以不处理。这样的异常由虚拟机接管。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码为止。如果不对运行时异常进行处理,那么出现运行时异常后,要么是线程终止,要么是主程序终止。对于运行时异常,一般不建议再程序中进行捕获处理,防止再程序的运行中掩盖错误使其无法被察觉。

    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类型转换异常

  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/huan-ch/p/9945828.html
Copyright © 2011-2022 走看看