• Java项目中常见的异常处理


       发生异常的情况有很多,其中包括以下几大类

                 1. 空指针异常;

                2. 用户输入异常;

                3. 多层异常捕获;

      想要知道Java是如何处理异常的,就需要掌握以下这三种异常的处理:

               1.检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,                 一个 异常就发生了,这些异常在编译时不能被简单地忽略。

              2.运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

              3.错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们                在编 译 也检查不到的。

    如何捕获异常:

          try和catch关键字

            将可能引发异常的代码段放在 Try 块中,而将处理异常的代码放在 Catch 块中。Catch 语句的顺序很重要。发生异常时,异常沿堆       栈向上传递,每个 Catch 块都有机会处理它。通过将异常类型与 Catch 块中指定的异常名称相匹配,可确定处理异常的 Catch 块。

           例如,以下 Catch 块将捕获简单对象访问协议 (SOAP) 异常:

    catch (SoapException e){Console.WriteLine("SOAP Exception Error Code: {0}",
    e.SubCode.Code.Name);
    Console.WriteLine("SOAP Exception Message is: {0}",
    e.Message);}Catch e As SoapException
    Console.WriteLine("SOAP Exception Error Code: {0}", e.SubCode.Code.Name)
    Console.WriteLine("SOAP Exception Message is: {0}", e.Message)End Try

    如果不存在特定类型的 Catch 块,则由可能存在的常规 Catch 块来捕捉异常。

    例如,您可以通过添加以下代码来捕获一般异常:

    catch (Exception e){Console.WriteLine("Exception Message: {0}", e.Message);}Catch e As Exception
    Console.WriteLine("Exception Message: {0}", e.Message)End Try

    将针对特定类型异常的 Catch 块放在一般异常之前。
    公共语言运行库将捕捉 Catch 块未捕捉的异常。根据运行库的配置,可能会显示一个调试对话框,或者停止执行程序并显示一个包含异常信息的对话框。

    多重捕获:

    一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

    多重捕获块的语法如下所示:

    try{

       // 程序代码

    }catch(异常类型1 异常的变量名1){

      // 程序代码

    }catch(异常类型2 异常的变量名2){

      // 程序代码

    }catch(异常类型2 异常的变量名2){

      // 程序代码

    }

    上面的代码段包含了 3 个 catch块。

    可以在 try 语句后面添加任意数量的 catch 块。

    如果保护代码中发生异常,异常被抛给第一个 catch 块。

    如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。

    如果不匹配,它会被传递给第二个 catch 块。

    如此,直到异常被捕获或者通过所有的 catch 块。

    finally关键字

    finally 关键字用来创建在 try 代码块后面执行的代码块。

    当发生异常后,catch捕获后自动结束程序,之后的finaly语句块就不会被执行了。

    在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。

    try{

      // 程序代码

    }catch(异常类型1 异常的变量名1){

      // 程序代码

    }catch(异常类型2 异常的变量名2){

      // 程序代码

    }finally{

      // 程序代码

    }

    自定义异常:

    很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。

    自定义异常的使用例子: 
    自定义test1()方法,抛出 “我喝酒了”的异常信息,test2()方法调用test1()方法,并将异常包装成RuntimeException类型的异常,继续抛出,在main方法中调用test2()方法,并尝试捕获异常

    public void test2() {
    
            try{
    
                test1();
    
            }catch (CustomException e){
    
               RuntimeException exception  =  new RuntimeException(e);
               //exception.initCause(cause)
               throw  exception;
            }
    
        }
    
        public void test1() throws CustomException{
    
            throw new CustomException("我喝酒了");
        }
    // main方法
        public static void main(String[] args) {
    
            CustomExceptionInital object =  new  CustomExceptionInital();
    
            //try{
    
                object.test2();
    
            //}catch(Exception e){
    
            //e.printStackTrace();
    
            //}
    
        }

  • 相关阅读:
    一句话命令修改大小写
    SpringBoot打成jar包后无法读取resources资源文件里文件路径的问题 cannot be resolved to absolute file path because it does
    java路径两种写法"/"和"\"
    java SASL_SSL 帐号密码 方式访问 kafka
    Mybatis 获得自动生成主键值
    swo2 SOA OAuth 使用,
    java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp是因为时间字段里有'0000-00-00 00:00:00‘这种格式的日期导致的
    OkHttp3找不到FormEncodingBuilder
    Maven依赖的版本范围
    java lambda求和
  • 原文地址:https://www.cnblogs.com/dixingchen/p/11804585.html
Copyright © 2020-2023  润新知