Java-异常机制

简介: 异常

异常机制

正常情况下,程序按照我们希望的样子和步骤去执行,但是,代码就像人生,要是一帆风顺了,就要想想是不是哪里出事了。程序若是有报错还好,就怕没有报错。

实例


public class Test {
   
   
    public static void main(String[] args) {
   
   
        test(1, 0);
    }

    public static  int test(int a,int b){
   
   
        return a / b;
    }
}

如上,除数等于0时会发生算数异常错误,程序直接中止。


image.png

异常是个什么样的

程序运行时,出现我们没有考虑的情况时,会出现异常,因为计算机是比较死板的,要严格遵守规则。

异常种类

运行时异常

数组越界、空指针异常等。

编译时异常

明确会发生的异常,必须要在编译阶段处理,不处理无法通过编译。

都是继承自父类异常类

错误和异常不是一个东西,有相似之处。 ERROR,错误等级高于异常。但是都继承于Throwable类。

异常处理有三种,不处理,立即处理(try-catch-finally结构处理),抛给调用处解决(throws),但是在main函数抛出会给JVM,这样是不行的,JVM会直接中断程序。

抛出异常

调用方法出现异常程序终止时,这时我们可以手动抛出一个异常来终止程序运行,同时告知上一级调用方法出现问题,有异常,终止程序。

public class Test {
   
   
    public static void main(String[] args) {
   
   
        test(1, 0);
    }

    public static  int test(int a,int b){
   
   
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
   
   
            throw ae;
        }
        return a / b;
    }
}

image.png

在构造方法可以写入原因,遇到异常未处理时,不会往后执行,直接结束程序。

运行结果指明异常种类,发生异常的地方,行数。从结构可以看出时堆栈的形式打印的。

有些不能直接抛出

必须指明异常具体种类,给出对应解决方案,不然是不能直接抛出的。
throws 关键词,会接着抛出异常,不会对其进行处理。如果没有异常,在重写时可以不抛出异常。

异常处理

自行处理异常需要捕获,使用 try-catch-finally结构。
try中写可能出现异常的语句,catch负责匹配异常对象并进行相应处理。


public class Test {
   
   
    public static void main(String[] args) {
   
   
        try{
   
   
            test(1, 0);
        }catch (ArithmeticException ae){
   
   
            System.out.println("除数不能为0");
        }
    }

    public static  int test(int a,int b){
   
   
        ArithmeticException ae = new ArithmeticException("除数不能为0");
        if (b == 0){
   
   
            throw ae;
        }
        return a / b;
    }
}

image.png

==在对异常进行处理后,程序可以正常开始结束==

处理可以打印出错信息,告知调用者不要进行非法操作。

捕获要有相应匹配的类来进行处理。

catch捕获处理的只能是Throwable类及其子类。但是出现错误不要去捕获,直接处理,catch一般处理异常。catch可以写多个,捕获多种不同异常。但是要注意父类写子类前的话,会导致子类变成不可达的语句。多种不同的类型也是可以合并的,类似于或运算。

finally

无论如何都会执行的语句。

目录
相关文章
|
12天前
|
缓存 前端开发 安全
java的双亲委派机制
java的双亲委派机制
22 5
|
3天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
6天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
1天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
12 5
|
1天前
|
存储 前端开发 搜索推荐
13:Session机制实现用户登录与注销功能-Java Web
13:Session机制实现用户登录与注销功能-Java Web
13 3
|
1天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
8 1
|
4天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
4天前
|
安全 Java 测试技术
利用Java反射机制提高Spring Boot的代码质量:概念与实战
【4月更文挑战第29天】Java反射机制提供了一种强大的方法来在运行时检查或修改类和对象的行为。在Spring Boot应用中,合理利用反射可以提高代码的灵活性和可维护性。本篇博客将探讨Java反射的核心概念,并展示如何通过反射提高Spring Boot项目的代码质量。
20 0
|
5天前
|
Java API
Java包机制及JavaDoc
Java包机制及JavaDoc
|
6天前
|
安全 Java
【JAVA】Java并发编程中的锁升级机制
【JAVA】Java并发编程中的锁升级机制