Java异常处理原理与用法实例分析

 更新时间:2020年04月15日 09:29:47   作者:随风行云  
这篇文章主要介绍了Java异常处理原理与用法,结合实例形式分析了Java异常处理相关概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了Java异常处理原理与用法。分享给大家供大家参考,具体如下:

本文内容:

  • 异常的介绍
  • 处理异常
  • 断言

 首发日期:2018-03-26


异常:

  • 异常是程序运行中发生的错误,比较常见的比如“除零异常”,如果一个除数为零,那么会发生这个异常
  • 异常会影响程序的正常运行,所以我们需要处理异常。
  • image
  • 所有的异常类是从 java.lang.Exception 类继承的子类。 异常类有两个主要的子类:IOException 类和 RuntimeException 类。

常见异常:

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组下标越界异常:ArrayIndexOutOfBoundsException

输入输出异常:IOException


处理异常:

  • 异常的捕获:try…catch…finally

    • 格式:image
    • try代码块:里面放的是异常可能发生的代码
    • catch代码块【可以有多个】:进行捕获异常的操作
      • e是捕获的异常类对象,直接打印会得到字符串结果(包含异常的线程、类型、位置)
      • e.getMessage():只返回异常的类型+原因
      • e.printStackTrace(): 异常的类型+原因+位置
      • e.toString():异常的类型+原因
    • finally【可选】:放的是无论发生异常与否都会执行的代码
    • 异常类如果无法确定类型而准确捕获时,可以捕获成所有异常类的父类Exception
    • 当异常捕获成功后,try…catch…finally代码块后面的代码可以执行成功。

image

image

public class Demo {

  public static void main(String[] args) {
//    int a=10/0;
    try{
      int a=10/0;
    }catch(ArithmeticException e) {
      System.out.println("run in ArithmeticException "+e);
      //run in ArithmeticException java.lang.ArithmeticException: / by zero
    }
    catch (Exception e) {
      System.out.println(e);
    }finally {
      System.out.println("最终执行的");//最终执行的
    }

  }

}
  • 异常的声明:

throws用于声明异常,声明函数可能发生的异常。【当函数中有throw来抛出异常时,函数头必须使用throws声明异常】

  • 抛出异常:

throw用于手动抛出异常,可以抛出自定义异常信息:throw 异常类型(异常信息)

public class Demo2 {
  
  static int div(int a,int b) throws ArithmeticException{
    if (b==0){
      throw new ArithmeticException("发生除零异常了!");
    }
    return a/b;
  }
  
  public static void main(String args[]) {
    try {
      System.out.println(div(2,0));
    }catch(ArithmeticException e) {
      System.out.println(e.getMessage());//发生除零异常了!
    }finally {
      System.out.println("in finally");//in finally
    }
    System.out.println("after finally");//after finally
    
  }
}

一般对于不想在函数中处理异常时,一般采用异常抛出处理(throw throws);否则使用try…catch…finally捕获异常。

自定义异常:

有时候没有定义我们想要的异常(比如我们MYSQL连接异常),那么我们可以自定义异常。

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类(是一些编译器会帮忙检查的异常),则需要继承 Exception 类。
  • 如果你想写一个运行时异常类(异常比如说,数组下标越界和访问空指针异常),那么需要继承 RuntimeException 类【这种异常类不需要throws】。
class MyException extends Exception{
  public MyException() {}
  public MyException(String msg) {
    super(msg);
  }
}

public class Demo3 {
  
  static int div(int a,int b) throws MyException {
    if (b==0){
      throw new MyException("发生异常了!");
    }
    return a/b;
  }
  
  public static void main(String args[]) {
    try {
      System.out.println(div(2,0));
    }catch(Exception e) {
      System.out.println(e);//异常.MyException: 发生除零异常了!
    }
    
  }
}

断言:

  • assertion(断言)在软件开发中是一种常用的调试方式
  • 断言一般是判断条件是否符合来决定程序是否继续执行的。【比如,你要吃饭,那么assert一下饭到手了没有,不然你可能会吃空气】
  • 断言的开启:eclipse、myeclipse的assert默认是关闭,想开启assert需要在设置perferences-》Java-》installed jres中配置一下虚拟机参数,配置成-ea或者-enableassertionsimage
  • Java中使用assert来定义断言:格式:assert [boolean 表达式]
public class Demo {

  public static void main(String[] args) {
    Boolean food=false;
    System.out.println("准备开始吃饭");
    assert food;
    
    System.out.println("饭来了");
    

  }

}

image

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java数组的去重

    Java数组的去重

    这篇文章主要介绍了Java数组去重,结合实例形式分析了Java针对数组的去重,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • CountDownLatch同步工具类使用详解

    CountDownLatch同步工具类使用详解

    这篇文章主要为大家详细介绍了CountDownLatch的使用说明,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • mybatisplus开启sql打印的三种方式汇总

    mybatisplus开启sql打印的三种方式汇总

    这篇文章主要介绍了mybatisplus开启sql打印的三种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • 使用多种方式实现遍历HashMap的方法

    使用多种方式实现遍历HashMap的方法

    下面小编就为大家带来一篇使用多种方式实现遍历HashMap的方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • SpringBoot整合Minio实现上传文件的完整步骤记录

    SpringBoot整合Minio实现上传文件的完整步骤记录

    MinIO是一个基于Apache License v2.0开源协议的对象存储服务,它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,下面这篇文章主要给大家介绍了关于SpringBoot整合Minio实现上传文件的完整步骤,需要的朋友可以参考下
    2022-05-05
  • 解析Java中的默认方法

    解析Java中的默认方法

    这篇文章主要介绍了Java中的默认方法,包括继承和调用等Java入门学习中的基础知识,需要的朋友可以参考下
    2015-07-07
  • Java中的SynchronousQueue阻塞队列使用代码实例

    Java中的SynchronousQueue阻塞队列使用代码实例

    这篇文章主要介绍了Java中的SynchronousQueue阻塞队列使用代码实例,SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,需要的朋友可以参考下
    2023-12-12
  • Java中ArrayList类的使用方法

    Java中ArrayList类的使用方法

    ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,下面来简单介绍下
    2013-12-12
  • java同步开篇入门简单介绍

    java同步开篇入门简单介绍

    java中的CountDownLatch、Semaphore、CyclicBarrier这些类又不属于锁,它们和锁又有很多共同点,都是为了协同多线程的执行,都是一种同步器,所以这里就借用同步来取名字了,也就是“同步系列”的来源。下面小编来简单介绍下
    2019-05-05
  • 解决FastJson中

    解决FastJson中"$ref重复引用"的问题方法

    这篇文章主要介绍了解决FastJson中"$ref重复引用"的问题方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11

最新评论