Java异常处理try catch的基本使用

 更新时间:2022年02月11日 11:07:23   作者:写Bug的渣渣高  
大家好,本篇文章主要讲的是Java异常处理try catch的基本使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

1. 异常

1.1 try…catch异常处理

try catch的异常处理的格式写法 :

try{
    被检测的代码
    可能发生异常的代码
}catch(异常类的类名  变量名){
    异常的处理方式 : 写什么都可以
    定义变量,创建对象,调用方法,循环,判断...
    只要写了catch,异常就被处理掉了
}
public static void main(String[] args) {
        int[] arr = {1};
        //try  catch异常处理
        try {
            int i = getNum(arr);
            System.out.println("i = " + i);
        }catch (Exception ex){
            System.out.println("异常被处理掉");
        }
        System.out.println(111);
    }

    public static int getNum(int[] arr){
        return arr[1] + 10;
    }

1.2 多catch并行处理

异常处理的代码中 : try 可以跟随多个catch

好处 : 不同的异常,可以区别对待,分开处理

public static void main(String[] args) {
    /**
    *   myExec出现2个异常
    *   写2个catch分别捕获异常
    */
    try {
        	myExec(0);
        }catch (NullPointerException ex){
        	System.out.println("处理空指针异常");
        }catch (ArrayIndexOutOfBoundsException ex){
        	System.out.println("处理越界异常");
        }
    }

    /**
    * 定义方法,目的引发异常
    * 传递参数 : 对参数进行判断
    */
    public static void  myExec(int i){
    if ( i == 0){
        //引发空指针异常
        String s = null;
        int len = s.length();
    }else {
        //引发越界异常
        int[] arr = {};
        int a = arr[0];
    }
}

多个catch处理异常的时候,写法特别注意 : 如果catch中的异常类没有关系,先写后写没有区别, catch中的异常类有继承关系,父类写在最下面

1.3 throw和throws 关键字的使用

throw关键字 : 只能写在方法内部, 关键字的后面跟随对象的创建

throws关键字 : 只能写在方法的定义上,关键字后面跟随异常类名

public static void main(String[] args) {
       /**
         *   getArea()调用方法,方法上有异常
         *   只能处理,不处理编译失败
         *   在main的方法上加throws 异常没有处理,交给JVM处理
         *   try catch处理
         */
    try {
        int area = getArea(-10);
        System.out.println(area);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
     * 功能: 计算正方形的面积
     * 需要参数 : 边长
     * 语法 : 方法的内部出现了异常,必须在方法定义上暴露
     */
public static int getArea(int length) throws  Exception{
    if (length <= 0)
        //数据错误,导致后面的计算不能进行
        //内部出现问题
        throw new Exception("边长不存在");
    return length * length;
}

1.4 finally代码块

finally代码块跟随try … catch使用,也有跟随try使用

finally代码块里面的程序,无论是否出现异常,都会执行,必须执行

结束JVM了,finally不执行.

主要用于释放资源

public static void main(String[] args) {
    try {
        int[] arr = {1};
        System.out.println(arr[0]);
    }catch (Exception ex){
        ex.printStackTrace();
    }finally {
        //后期用于资源的释放
        System.out.println("这里的代码,必须执行");
    }
}

1.5 RuntimeException异常

异常的父类是Exception,Exception类的子类RuntimeException,凡是RuntimeException和他的所有子类,都称为运行异常,非子类的称为编译异常

编译异常 : 方法出现编译异常,调用者必须处理,否则编译失败.处理方式可以是try catch或者是throws都可以

运行异常 : 方法出现运行异常,方法的定义上,不需要throws声明,调用者也不需要处理这个异常

不要处理运行异常 : 程序一旦发生运行异常,请程序人员修改源码

常见的运行异常

NullPointerException 空指针

IndexOutOfBoundsException 越界异常

ClassCastException 类型强制

IllegalArgumentException 无效的参数异常

1.6 自定义异常

Java官方已经定义了大量的异常类,但是依然不够,以后做项目的时候,会出现的异常,在JDK中没有定义的,需要我们自己定义异常

自定义异常,入伙,继承Exception或者RuntimeException 只有Exception和他的子类,才具有可抛出性

自定义的类中,构造方法,super调用父类构造方法,传递异常信息

/**
 *  自定义的异常类
 *    成绩负数的异常
 *    继承哪个父类呢
 *
 *    自定义异常信息 : 继承父类 RuntimeException 带有String类型的构造方法 (String 异常信息)
 */
public class ScoreException extends RuntimeException{
    public ScoreException(String s){
        super(s);
    }
}
    public static void main(String[] args) {
       // int[] arr = {1};
        //System.out.println(arr[2]);
        int avg = getAvg(-100,2);
        System.out.println("avg = " + avg);
    }

    /**
     * 计算成绩的平均分
     */
    public static int getAvg(int math,int chinese){
        //判断成绩的数值
        if ( math < 0 || chinese < 0)
            //手动抛出,自己定义的异常
            throw new ScoreException("成绩不存在");

        return  (math + chinese) / 2;
    }

总结

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

相关文章

  • 浅谈导入JavaWeb 项目出现的问题

    浅谈导入JavaWeb 项目出现的问题

    这篇文章主要介绍了导入JavaWeb 项目出现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • java中PreparedStatement和Statement详细讲解

    java中PreparedStatement和Statement详细讲解

    这篇文章主要介绍了java中PreparedStatement和Statement详细讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解Java编程规约(命名风格、常量定义、代码格式)

    详解Java编程规约(命名风格、常量定义、代码格式)

    这篇文章主要介绍了详解Java编程规约(命名风格、常量定义、代码格式),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-10-10
  • Java零基础讲解异常

    Java零基础讲解异常

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等
    2022-04-04
  • SpringBoot集成Validation参数校验

    SpringBoot集成Validation参数校验

    这篇文章主要为大家详细介绍了SpringBoot集成Validation参数校验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • JavaEE中用response向客户端输出中文数据乱码问题分析

    JavaEE中用response向客户端输出中文数据乱码问题分析

    这篇文章主要介绍了JavaEE中用response向客户端输出中文数据乱码问题分析,需要的朋友可以参考下
    2014-10-10
  • 一篇文章带你玩转Spring bean的终极利器

    一篇文章带你玩转Spring bean的终极利器

    这篇文章主要给大家介绍了关于玩转Spring bean的终极利器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring bean具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • java数据结构循环队列的空满判断及长度计算

    java数据结构循环队列的空满判断及长度计算

    这篇文章主要为大家介绍了java数据结构循环队列的空满判断及长度计算,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 在Java中实现让线程按照自己指定的顺序执行

    在Java中实现让线程按照自己指定的顺序执行

    这篇文章主要介绍了在Java中实现让线程按照自己指定的顺序执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Springboot 整合maven插口调用maven release plugin实现一键打包功能

    Springboot 整合maven插口调用maven release plugin实现一键打包功能

    这篇文章主要介绍了Springboot 整合maven插口调用maven release plugin实现一键打包功能,整合maven-invoker使程序去执行mvn命令,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论