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

    异常

             异常(Exception,例外):运行程序中出现的不正常现象,异常的前提是程序编译通过,运行时候才异常。通常常见于客户运行是的不正常的环境或操作产生。

        为什么要处理异常:异常会导致出现不正常的反馈,或程序无条件的退出,从而导致某些工作无法回退。

        怎样处理异常:开发阶段对于所有可能的异常情况进行先期检查,但通常上并不能完全考虑到。另一种处理方法是用面向对象的异常处理机制。具体下面会有。

        常见的异常:异常类一般都是 Exception 的子类,类名以 Exception 结尾。如:NullPointerException,文档中有其出现的原因。一定要学会查看Java文档

        1、 ArithmeticException: 算术异常,如除数为0。

        2、ArrayIndexOutOfBoundsException:数组越界异常。

        3、ArrayStoreException:数组存储异常。

        4、ClassCastException:类型转换异常。

        5、 IllegalArgumentException:无效参数异常。

        6、 NegativeArraySizeException:数组尺寸为负异常。

        7、NullPointerException:未分配内存异常。

        8、NumberFormatException:数字格式异常。

        9、StringIndexOutOfBoundsException:字符串越界异常。

    异常的就地捕获

             异常的就地捕获(catch):当程序发生异常时,系统捕获异常,转而执行异常处理代码。

             怎样进行就地捕获:分步实现

        1、用 try 块将可能出现异常的代码包起来。

        2、用 catch 块来捕获异常并处理异常。

        3、如果有一些代码是不管异常是否出现都要运行的,用 finally 块将其包起来。

    形式如下:

    try{
          /*可能出现异常的代码*/
    }
    catch(可预见的 Exception1 ex1){
          /*处理 1*/
    }
    catch(可预见的 Exception2 ex2){
          /*处理 2*/
    }
    ...
    finally{
          //可选
    }
    

         1、我们可以看到try后面接多个catch用来捕获多个异常。而如果有catch(Exception ex)则必须写在 catch 块的最后一个,代表前面无法处理的异常被这个块处理。

         2、一个try后面必须至少接一个catch,可以不接finally,但是最多只能有一个finally。finally可以更大程度上保证程序的安全性。他可以让一段代码无论如何都能够执行。

    异常的向前抛出

         1、就地处理方法可以很方便地定义提示信息,对于一些比较简单的异常处理,可以选用这种方法。

         2、向客户端传递的方法,其优势在于可以充分发挥客户端的能力,如果异常的处理依赖于客户端,或者某些处理过程在本地无法完成,就必须向客户端传递。

        怎样向前抛出:1、将需要将异常向前抛出的函数加上一个标记:throws XXXException,表示可能向前抛出某种异常。举例:

    public void fun() throws NullPointerException {
          //该函数如出现 NullPointerException,则向前抛出
    public void fun() throws NullPointerException, NumberFormatException{
           //该函数如出现 NullPointerException或NumberFormatException,则向前抛出
    }
    public void fun() throws Exception {
          //该函数如出现异常,则向前抛出
    }

         2、客户端可以就地处理,也可以继续抛出。

         就地处理

    public class Test1 {
          //该函数中如果出现异常,向前抛出
          public static void add1() throws Exception{
                //内容
          }
          public static void main(String[] args) {
                //用 try 块将可能出现异常的代码包起来
                try{
                      add1();
                }
                //处理 NumberFormatException
                catch(NumberFormatException ex){
                      //处理异常
                }
                //处理其他不可预见的异常
                catch(Exception ex){
                      //处理其他异常
                }
                finally{
                     System.out.println("程序运行完毕");
                }
          }
    }

              继续抛出:

    public class Test2 {
          //该函数中如果出现异常,向前抛出
          public static void add2() throws Exception{
                //内容
           }
          //main 函数将异常继续向前抛出(给控制台打印)
          public static void main(String[] args) throws Exception{
                add2(); 
          }
    }

    自定义异常

           为什么要自定义异常:给予异常更加丰富的功能。

       如何自定义异常:1、建立一个自定义异常类,继承 Exception ,在里面封装需要封装的信息。

    import java.util.Date;
    public class InputException extends Exception{
          private Date date;
          public InputException (String message,Date date){
                super(message);
                this.date = date;
          }
          public Date getDate(){
                return this.date;
          }
    }

    注:自定义异常类,并不是一定要继承 Exception,实际上继承 Exception 的子类也可以;另外还可以继承 java.lang.Throwable。只是继承 Exception 是我们最常用的做法。

        2、在可能发生异常的函数后面添加 throws XXXException。

        3、在可能抛出异常的函数内实例化异常对象,用throw关键字抛出。

        4、在调用方用try-catch捕捉异常对象。

    import java.util.Date;
    import javax.swing.JOptionPane;
    public class Test3 {
          //该函数中如果出现异常,向前抛出
          public static void add3() throws InputException{//2.添加
                try{
                     //内容
                }catch(Exception ex){
                      InputException ie =new InputException(" 发生了异常",new Date());
                      //3.抛出该异常对象
                      throw ie;
                 }
           }
           public static void main(String[] args) {
                 try{
                       add3();
                 }
                 //处理异常
                 catch(InputException ie){//4.在调用方用 try-catch  捕捉异常对象。
                       //处理异常
                 }
           }
    }
  • 相关阅读:
    web服务器资源分类场景实践
    web服务器动静资源分离及负载均衡调制
    四层负载均衡
    集群中nginx服务的健康检查及负载均衡模板更新
    源码安装nginx及增加模块,nginx的秒级升级,秒级回滚
    phpadmin+redis实现图形化管理数据库笔记
    cookie和session
    移动硬盘修复工具哪个好?怎么修复教程
    硬盘 SMART 检测参数详解[转]
    磁盘显示为GPT(保护分区)
  • 原文地址:https://www.cnblogs.com/541wsy/p/12548218.html
Copyright © 2011-2022 走看看