新手了解java 异常处理基础知识

 更新时间:2021年07月06日 08:47:22   作者:王星伟QAQ  
Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。那么这篇文章总结了Java有效处理异常的三个原则,有需要的朋友们可以参考借鉴

一、异常体系结构

1.什么是异常

在java程序运行过程中,发生了一些意料之外的情况就是异常。在java中异常一颗分为两大类:

(错误)Error 和 (异常)Exception。

  • 对于(错误)Error来说,我们无法通过程序去解决所有的错误,仅仅可以去尝试捕获这些错误,但是无法处理,往往错误的发生对程序来说是重大的致命性问题,需要通过较大的调整去修正它。
  • 对于(异常)Exception来说,它是我们可以通过程序去处理的,我们可以对这些异常情况做出捕获和处理。

2.异常的体系结构

​ Throwable

​ Error Exception

​ RutimeException 编译时异常

说明: RutimeException和一些编译时异常继承了ExceptionExceptionError继承了Throwable

运行时异常(RutimeException)在代码中我们往往不需要去捕获它,而是通过处理代码的逻辑来规避运行时异常。常见的5种运行时异常:

  1. ClassCastException(类转换异常)
  2. ArrayIndexOutOfBoundsException(数组越界异常)
  3. NullPointerException(空指针)
  4. ArrayStoreException(数据存储异常,操作数组时类型不一致)
  5. NumberFormatException 数字格式化异常
public class Demo{
    public void test(){
        //此代码声明这里会抛出一个运行时异常
       throw new RutimeException();
    }
}
public class DemoTest{
    public static void main(String[] args){
       Demo demo = new Demo()
           demo.test();
    }
}

从上述代码种可以看出,运行时异常产生时,代码可以正常的编译与运行,但是运行结果会抛出一个运行时异常。

说明:运行时异常会向上传播。

二、异常处理

当异常发生时,我们需要对其进行处理,处理异常有两种方式:

一种使用try…catch…finally进行捕获;

另一种使用throws的方式进行抛出;

try…catch…finally

语法

try {
// 可能发生异常的代码块
} catch (/* 需要捕获的异常类 */) {
// 捕获到异常后的处理代码块
} finally {
// 不管是否会发生异常,此代码块都会被执行
}

示例:

public class Demo1{
    public static void main(String[] args){
        String[] strs = {"张三","李四","王五"};
        try {
            System.out.println("-------");
            System.out.println(strs[3]); // 此处会发生异常,当异常发生后,后面的代码都不会被执行到
                for (String str : strs) {
                    System.out.println(str);
                }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("++++++++++");
        } catch (Exception e) {
            System.out.println("++++++++++");
        }finally{
            System.out.println("--------------");
        }
    }
}

说明:在try…catch…语句中,try语句中产生异常的代码后面的代码不会被执行,产生异常后直接到了catch语句块中。catch语句块可以写多个,catch语句分支是从上到下依次找对应类型的,但是注意catch捕获的异常类型中父类型必须写在子类型的后面。

finally语句块是无论异常是否产生都会执行的。常用与资源的释放。

throw 与 throws

  • throws是异常处理机制的一种,而throw不是;
  • throws是声明异常类;而throw是抛出异常对象;
  • throws可以声明多个异常类,而throw只能抛出一个异常对象;
  • throws是声明在方法上的,而throw是定义在方法内的;

示例:

public class Demo{
    public void test() throws Exception{
        //此代码声明这里会抛出一个异常
       throw new Exception();
    }
}
public class DemoTest{
    public static void main(String[] args){
       Demo demo = new Demo()
         try {
           demo.test();
         }catch (Exception e) {
            System.out.println("++++++++++");
        }finally{
            System.out.println("--------------");
        }
    }
}

三、自定义异常

运行时异常

继承 RutimeException

示例:

public class MyRutimeException extends RutimeException {
    public MyRutimeException(String message){
        super(message);
    }
}

编译时异常

继承Exception

示例:

public class MyException extends Exception {
    public MyException(String message){
        super(message);
    }
}

总结

本篇文章就到这里了,希望对你有所帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Java8 Stream对两个 List 遍历匹配数据的优化处理操作

    Java8 Stream对两个 List 遍历匹配数据的优化处理操作

    这篇文章主要介绍了Java8 Stream对两个 List 遍历匹配数据的优化处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • linux部署出现java文件操作报错:java.io.FileNotFoundException解决办法

    linux部署出现java文件操作报错:java.io.FileNotFoundException解决办法

    这篇文章主要g介绍了linux部署出现java文件操作报错:java.io.FileNotFoundException解决的相关资料,这个错误通常表示你的Spring Boot应用程序无法找到指定的文本文件,需要的朋友可以参考下
    2023-12-12
  • Java并发编程之创建线程

    Java并发编程之创建线程

    这篇文章主要介绍了Java并发编程中创建线程的方法,Java中如何创建线程,让线程去执行一个子任务,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Java多线程run方法中直接调用service业务类应注意的问题及解决

    Java多线程run方法中直接调用service业务类应注意的问题及解决

    这篇文章主要介绍了Java多线程run方法中直接调用service业务类应注意的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • java如何实时动态获取properties文件的内容

    java如何实时动态获取properties文件的内容

    这篇文章主要介绍了java如何实时动态获取properties文件的内容,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring Cloud原理以及核心组件详解

    Spring Cloud原理以及核心组件详解

    这篇文章主要介绍了Spring Cloud原理以及核心组件详解,spring cloud有5个核心组件,文章中进行了一一的详细介绍,需要的朋友可以参考下
    2023-03-03
  • 使用springboot对linux进行操控的方法示例

    使用springboot对linux进行操控的方法示例

    这篇文章主要介绍了使用springboot对linux进行操控的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 深入了解JAVA HASHMAP的死循环

    深入了解JAVA HASHMAP的死循环

    HASHMAP基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)下面小编来带大家详细了解下吧
    2019-06-06
  • Java中如何将符号分隔的文本文件txt转换为excel

    Java中如何将符号分隔的文本文件txt转换为excel

    这篇文章主要介绍了Java中如何将符号分隔的文本文件txt转换为excel,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Spring Boot结合ECharts案例演示示例

    Spring Boot结合ECharts案例演示示例

    本文主要主要介绍了Spring Boot结合ECharts案例演示示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论