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

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

目录
相关文章
|
2天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
21 1
|
2天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
2天前
|
Java 索引
【JAVA基础篇教学】第七篇:Java异常类型说明
【JAVA基础篇教学】第七篇:Java异常类型说明
|
2天前
|
消息中间件 安全 前端开发
字节面试:说说Java中的锁机制?
Java 中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。 锁的作用主要体现在以下几个方面: 1. **互斥访问**:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据不一致问题。 2. **内存可见性**:通过锁的获取和释放,可以确保在锁保护的代码块中对共享变量的修改对其他线程可见。这是因为 Java 内存模型(JMM)规定,对锁的释放会把修改过的共享变量从线程的工作内存刷新到主内存中,而获取锁时会从主内存中读取最新的共享变量值。 3. **保证原子性**:锁
16 1
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
23 4
|
2天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
15 0
|
2天前
|
Java 关系型数据库 MySQL
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
【JAVA进阶篇教学】第八篇:Java链接MySql数据库异常
|
2天前
|
Java 数据安全/隐私保护
java中异常处理机制
java中异常处理机制
13 1
|
2天前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
23 0
|
2天前
|
Java API 开发者
解密Java反射机制与动态代理
解密Java反射机制与动态代理
14 0