JAVA三种异常处理机制的具体使用

 更新时间:2024年06月25日 10:01:24   作者:爱吃香蕉的阿豪  
异常是程序在编译或执行的过程中可能出现的问题,本文主要介绍了JAVA三种异常处理机制的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

异常是程序在编译执行的过程中可能出现的问题,语法错误不算在异常体系

提前处理异常,程序会更加安全

一、异常体系

Error:

系统级别问题、JVM退出等,代码无法控制

Exception:

Java.lang包下,称为异常类,它表示程序本身可以处理的问题

Runtime Exception及其子类:

运行时异常,编译阶段不会报错(如空指针,数组索引越界异常)

除Runtime Exception之外所有异常:

编译时异常,编译期必须处理的,否则程序不能通过编译(如日期格式化)

二、异常示例

1.运行时异常

编译阶段不会报错,运行时才会提示错误

public static void main(String[] args) {

    //数组索引越界异常:ArrayIndexOutOfBoundsException
    int[] arr = {1, 2, 3};
    System.out.println(arr[3]);

    //空指针异常:NullPointerException,直接输出没问题,但是调用空指针的变量功能就会报错
    String name = null;
    System.out.println(name);          //可以输出
    System.out.println(name.length()); //报错

    //类型转换异常:ClassCastException
    Object o = 12;
    String s = (String) o;

    //数学操作异常:ArithmeticException
    int c = 10/0;

    //数字转换异常:NumberFormatException
    String number = "a2";
    Integer i = Integer.valueOf(number);
}

2.编译时异常

编译阶段就报错,必须要处理

如下图,日期解析异常 

三、异常处理

1.默认异常处理

通常我们不对代码可能出现的异常进行处理,Java就会默认处理我们的异常,如下:

默认会在出现异常的代码处,自动创建一个异常对象:ArithmeticException

异常会从方法中出现的抛给调用者,调用者抛给JVM虚拟机

虚拟机收到异常对象后,先在控制台输出异常栈信息数据

直接从出现异常的地方关闭程序

2.异常处理1 & throws

添加throws ***到方法签名

规范写法throws Exception

将方法内部出现的异常抛给本方法调用者

throws仅仅是将函数中可能出现的异常向调用者声明,而自己则不具体处理。

throws声明:如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉或并不能确定如何处理这种异常,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理,否则编译不通过。

public static void main(String[] args) throws ParseException {
    parseTime("2015-10-10 10:10:10");
    }

    public static void parseTime(String data) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
        Date d = sdf.parse(data);
    }

3.异常处理2  & try . . . catch . . .

监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理

发生异常的方法自己独自完成异常处理,程序还能继续往下执行

public static void main(String[] args)  {
parseTime("2015-10-10 10:10:10");
}

public static void parseTime(String data)  {

    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
        Date d = sdf.parse(data);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

4.异常处理3 & 前面两者的结合

 方法将异常通过throws抛给调用者,调用者收到异常后捕获处理。

public static void main(String[] args)  {
    try {
        parseTime("2015-10-10 10:10:10");
        System.out.println("成功");
    } catch (ParseException e) {
        e.printStackTrace();
        System.out.println("失败");
    }
}

public static void parseTime(String data) throws ParseException {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
    Date d = sdf.parse(data);
}

5.运行时异常的处理

可以不进行处理,编译阶段不会报错,但建议处理,在最外层捕获

public static void main(String[] args) {
	System.out.println("开始");
    try {
        int d = 10/0;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    System.out.println("结束");
}

四、自定义异常 

 JAVA无法为所有的问题提供异常类,如果企业想通过异常的方式来管理某个业务问题,就需要自定义异常类了。

 按照国际惯例,自定义的异常应该总是包含如下的构造函数:

  • 一个无参构造函数
  • 一个带有String参数的构造函数,并传递给父类的构造函数。
  • 一个带有String参数和Throwable参数,并都传递给父类构造函数。
  • 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

注意:如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。

自定义编译时异常

定义一个异常类继承Exception

重写构造器

public class Ageilleagaleception  extends Exception{
    public Ageilleagaleception (){

    }
    public Ageilleagaleception(String message){
        super(message);
    }
}

在出现异常的地方用throw new自定义对象抛出

 public static void checkAge(int age) throws Ageilleagaleception {
        if(age < 0 || age > 200){
            throw new Ageilleagaleception(age+"is illegal");
        }else {
            System.out.println("年龄正确");
        }
    }

自定义运行时异常

定义一个类继承RuntimeException

重写构造器

在出现异常的地方用throw new自定义对象抛出

总结

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常

异常处理不能替代简单的测试,不要过分的细化异常

到此这篇关于JAVA三种异常处理机制的具体使用的文章就介绍到这了,更多相关JAVA 异常处理机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java内存模型原子性原理及实例解析

    Java内存模型原子性原理及实例解析

    这篇文章主要介绍了Java内存模型原子性原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java如何使用poi导入导出excel工具类

    Java如何使用poi导入导出excel工具类

    这篇文章主要介绍了Java如何使用poi导入导出excel工具类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 关于WeakhashMap与HashMap之间的区别和联系

    关于WeakhashMap与HashMap之间的区别和联系

    这篇文章主要介绍了关于WeakhashMap与HashMap之间的区别和联系,WeakHashMap从名字可以得知主要和Map有关,不过还有一个Weak,我们就更能自然而然的想到这里面还牵扯到一种弱引用结构,因此想要彻底搞懂,我们还需要知道四种引用,需要的朋友可以参考下
    2023-09-09
  • 详解Java的Spring框架中的注解的用法

    详解Java的Spring框架中的注解的用法

    这篇文章主要介绍了Java的Spring框架中的注解的用法,包括对Java bean的定义的作用介绍,需要的朋友可以参考下
    2015-11-11
  • Spring在@ConditionalOnProperty注解使用详解

    Spring在@ConditionalOnProperty注解使用详解

    这篇文章主要介绍了Spring在@ConditionalOnProperty注解使用详解,@ConditionalOnProperty注解是Spring Boot的条件注解,主要用法是根据配置文件中的属性来控制某个配置类是否生效,或者控制某个Bean是否被创建,需要的朋友可以参考下
    2023-11-11
  • maven资源过滤打包后文件变大的处理方法

    maven资源过滤打包后文件变大的处理方法

    maven目前在web上面的使用方式很普遍,而打包的方式也存在很多方式,下面这篇文章主要给大家介绍了关于maven资源过滤打包后文件变大的处理方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • SpringBoot实现Excel文件批量上传导入数据库

    SpringBoot实现Excel文件批量上传导入数据库

    这篇文章主要为大家详细介绍了SpringBoot实现Excel文件批量上传导入数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Mabatis错误提示Parameter index out of range的处理方法

    Mabatis错误提示Parameter index out of range的处理方法

    这篇文章主要介绍了Mabatis错误提示Parameter index out of range 的处理方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • maven一行命令引入第三方包打包的实现

    maven一行命令引入第三方包打包的实现

    在项目开发过程中,难免会用到第三方jar的时候,本文主要介绍了maven一行命令引入第三方包打包的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Idea入门教程之一分钟创建一个Java工程

    Idea入门教程之一分钟创建一个Java工程

    idea作为Java开发最好用的编写代码软件之一,首先进行的就是工程的创建,这篇文章主要给大家介绍了关于Idea入门教程之一分钟创建一个Java工程的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-07-07

最新评论