【java】异常与错误

Throwable包括Error和Expected。

Error

Error错误是程序无法处理的,由JVM产生并抛出的。

举例:StackOverflowError \ ThreadDeath

Expected

Expected异常包括两类,即受检异常 (非运行时异常)和非受检异常(运行时异常),异常往往是由程序的逻辑错误引起的。异常可以由程序自行处理。

受检异常:在编辑器中可以检测到,无需运行。

举例:ClassNotFoundException

非受检异常:运行后才可以检测到的异常。

举例:ArrayIndexOutOfBoundsException \ 空指针

程序处理异常的方式
① try - catch - finally

原本的程序设计是:一旦出现异常,那么将不再向下执行程序。

但是如果提前将可能出现异常的程序用try - catch包裹,那么程序即使出现问题也会继续向下执行。finally是不管上边正确还是错误,都会执行的程序。

java 复制代码
public class Main {
    public static void main(String[] args) {
        int[] arr = new int[5];
        try {
            System.out.println("----------这是一条语句----------");
            arr[5] =  1;
            System.out.println("这条语句不会执行");
        } catch (Exception e){
            System.out.println("出现异常了");
        } finally {
            System.out.println("不管是否出现异常都会执行");
        }
    }
}

运行结果

② 抛出

抛出是让程序的调用程序处理异常,这并不能解决问题,只是指出了问题所在。

java 复制代码
public class Main {
    public static void main(String[] args) {
        try {
            run();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("try-catch虽然报错,但仍然可以运行");
    }
    public static void run() throws ClassNotFoundException {
        fly();
    }
    public static void fly() throws ClassNotFoundException {
        Class.forName("MainX");
    }
}

报错但存在输出

java 复制代码
public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        run();
        System.out.println("仅报错,并不能输出");
    }
    public static void run() throws ClassNotFoundException {
        fly();
    }
    public static void fly() throws ClassNotFoundException {
        Class.forName("MainX");
    }
}

报错且不存在输出

相关推荐
皮皮林5515 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
卡尔特斯10 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源10 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole10 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫10 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide11 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613511 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源11 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
Java中文社群12 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心12 小时前
从零开始学Flink:数据源
java·大数据·后端·flink