zoukankan      html  css  js  c++  java
  • Java语言学习(8)-Java中的异常处理

    1        Java中的异常处理

    一、异常类说明

    java中的异常包含如下几类:

      1)       检查类异常:这类异常是程序的用户错误或问题引起的,这些是开发人员是无法预见的。例如:打开一个不存在的文件。

      2)       运行时异常:运行时异常,是可能被程序开发人员避免的异常。

      3)       错误:错误不是异常,而是脱离程序开发人员控制的问题。例如:当栈溢出,一个错误就发生,错误在编译时是检查不到的。

     

    java中异常类:

      Java的异常类都在java.lang包中。java中所有的异常,都是从java.lang.Exception中继承的子类。类的继承关系如下:

     

      Throwalbe继承出Exception和Error两个子类。Error类在Java程序中通常不捕获,因为Error一般发生在严重故障时,java程序本身处理不了。

     

    Java内置了很多基础操作异常类:

      1、Java内置的检查类异常:

        1)       ClassNotFoundException:应用程序加载类时,找不到类定义,抛出此异常。

        2)       CloneNotSupportedException:当调用对象的Clone方法克隆对象时,发现该对象无法实现Cloneable接口,抛出此异常。

        3)       lllegalAccessException:拒绝访问一个类时,抛出此异常

        4)       InstantiationException:当试图使用类中的newInstance方法创建类的一个实例,而该类是一个接口、或一个抽象类无法实例化时,抛出此异常。

        5)       InterruptedException:一个线程被另一个线程中断,抛出此异常

        6)       NoSuchFieldException:请求的变量不存在,抛出此异常

        7)       NoSuchMethodException:请求的方法不存在时,抛出此异常

      2、Java内置的非检查类异常(运行时异常):

        1)       ArithmeticException:当出现异常的运算条件时,抛出此异常。如除0

        2)       ArrayIndexOutofBoundsException:当采用非法索引访问数据组时,抛出此异常。

        3)       ArrayStoreException:试图将一个错误类型的对象存储入数组时,抛出此异常。

        4)       ClassCastException:试图将对象转换为不是实例的子类时,抛出此异常

        5)       lllegalArgumentException:向方法传递不合适、或不正确的参数时,抛出此异常

        6)       lllegalMonitorStateException:一个线程试图等待一个对象的监视器、或试图通知其他正在等待此对象的监视器,但是此线程本身没有指定监视器。

        7)       lllegalThreadStateException:线程没有处于求情操作所需要的状态时,抛出此异常。

        8)       IndexOutofBoundsEception:排序索引(数字、字符串、向量等的排序)超出范围时,抛出此异常

        9)       NegativeArraySizeException:程序试图创建大小为负的数组时,抛出此异常

        10)    NullPointerException:试图访问的对象为Null时,抛出此异常

        11)    NumberFormatException:试图把字符串转换为数字类型,但该字符不能转换时,抛出此异常。

        12)    SecurityException:由安全管理器抛出的异常,标识安全侵犯

        13)    StringIndexOutofBoundsException:指示的字符串索引为负数、或超出字符串大小时,抛出此异常。

        14)    UnsupportedOperationException:当不支持的请求操作时,抛出此异常。

     

    异常类的方法,如下为Throwable类的方法:

      1)       public String getMessage() 返回关于异常的详细信息

      2)       public Throwable getCause() 返回代表异常的原因

      3)       public String toString() 使用getMessage的结果返回类的字符串级名字

      4)       public void printStackTrace() 打印toString的结果和栈层次的System.err

      5)       public StackTraceElement[] getStackTrace() 返回一个包含堆栈层次的数组

      6)       public Throwable fillnStackTrace() 用当前的调用栈层次填充Throwable 对象栈层次

     

    二、如何使用异常类

    1、java中捕获异常的语法:

      try {

      }

      catch(异常类名字) {

      }

      catch(异常类名字) {

      }

      finally {

      }

      1)     try块内的代码称之为保护代码,保护代码异常时,可抛出异常。可能是系统内置的异常、或用户自定义的异常。

      2)     catch块捕获异常。一个try可以有多个catch。异常会逐个和catch中的异常名字对比,找到匹配的,执行catch后的代码块。

      3)     finally用于指定不论是否发生异常,都会被执行的代码块。一般用于清理类等收尾善后工作。

      4)     一个try语句不能既无catch、也无finally。finally可有可无,非强制性。

     

    2、java中抛出一个异常的语法

      抛出异常的关键字:throws  throw

      以函数自定义抛出一个RemoteException异常为例:

        public class ClassName {

          ……

          public void funcTest(Integer i) throws RemoteException {

            .....

            if(.....) {

                        throw new RemoteException();

                      }

               }

        }

             一个方法可以抛出多个异常,中间用逗号隔开:

                   public void funcTest(Integer i) throws RemoteException, InsufficientFundsException

            异常本质上,也是一个类。也需要定义,抛出时也需要new创建。

     

    三、自定义异常类

    1、定义异常类:

                  public class AException extends Exception

                  {

                         private double amount;

                         publice void AException(doubule amount) {

                                //也需要定义异常类的构造方法,new抛出异常时会调用

                                this.amount = amount;

                         }

     

                         public double getAmount() { //定义异常类的其他方法

                                return this.amount;

                         }

                  }

     

    2、使用自定义异常:

      函数执行时,抛出异常

                  public class MyClasss {

                         double a;

                         double b;

                         ......

                         public void afunc() throws AException {    

                                ......

                                if(a < b) {

                                       throw new AException(b-a);  //创建异常,抛出

                                }

                                ......

                         }

                  }

     

    3、捕获自定义异常

                         public class BankDemo {    //主类定义

            .....

                                public static void main(String[] args) {  //main函数

                                       .....

                                       .....

                                       try{

                                              MyClasss c = new MyClasss();

                                              c.aFunc();     //含抛出自定义异常的编码块

                                       }

                                       catch(AExcption) {        //捕获自定义异常

                                              System.out.println("get AException")

                                       }

                                }

                         }

  • 相关阅读:
    UVa LA 2965
    UVa LA 3695
    UVa LA 3029 City Game 状态拆分,最大子矩阵O(n2) 难度:2
    Uva LA 3177
    Uva LA 3902
    Uva 11520
    UVa Live 3635
    python学习笔记-day05 字典
    python学习笔记-day04 元组
    python学习笔记 day04 列表增删改查
  • 原文地址:https://www.cnblogs.com/yickel/p/11837453.html
Copyright © 2011-2022 走看看