java中Error和Exception用法上有什么区别,Error是怎么回事?

本文深入探讨了Java中Error与Exception的区别,详细解释了Error如何表示系统级错误和程序不必处理的异常,如内存溢出等问题。通过示例代码展示了在特定条件下,如内存资源不足时,Error的触发及处理方式。

顺便提一句, 和Exception 相对应的,还有Error,Error(错误)表示系统级的错误和程序不必处理的异常,是JRE(java运行环境)的内部错误或者硬件问题,比如,另外 某一处地方的bug引起的内存溢出,内存资源不足等,OutOfMemoryError,对这类错误,程序基本无能为力,比如下例中,catch不被执行 (其实虚拟机是有能力执行的,否则finally为什么被执行?但就是这原则,意味着,程序员们不要试图在catch中做什么,你做了, 我也不执行,因为是Error,而不是Exception)只能退出。

例:

public class Test {
/* maxMemory将返回java虚拟机所能返回的最大可用内存。0.92可以, 0.93就报错 */
    int size_Make_to_win = (int) (Runtime.getRuntime().maxMemory() * 0.93);
    public void allo() {
        byte[] data1 = new byte[size_Make_to_win];
    }
    public static void main(String[] args) {
        Test t = new Test();
        try{
        t.allo();
        }
        catch(Exception e)
        {
            System.out.println(e+"qqq");
        }
        finally
        {
            System.out.println("in finally");
        }

    }
}

更多请见:https://blog.youkuaiyun.com/qq_44639795/article/details/101302017

### Java 中自定义异常的概念 在 Java 编程中,当内置的异常类无法满足特定需求时,可以通过继承 `Exception` 或 `RuntimeException` 来创建自定义异常类[^2]。通常情况下,自定义异常需要提供两个构造方法:一个是无参数的构造方法,另一个是带有异常信息字符串的构造方法。 以下是实现自定义异常的一个简单例子: ```java // 定义一个自定义异常类 public class MyCustomException extends Exception { // 无参构造方法 public MyCustomException() { super(); } // 带有异常信息的构造方法 public MyCustomException(String message) { super(message); } } ``` 通过这种方式,开发者可以根据业务逻辑的需求抛出自定义异常并对其进行处理[^1]。 --- ### Error Exception区别用法 #### 1. **Error** `Error` 是指 JVM(Java 虚拟机)运行过程中发生的严重问题,通常是不可恢复的情况。这些问题超出了应用程序的控制范围,因此一般不需要也不应该被捕获或处理。常见的 `Error` 类型包括但不限于以下几种: - `OutOfMemoryError`: 表示内存不足。 - `StackOverflowError`: 表示堆栈溢出。 由于这些错误是由外部环境引起的,并且几乎不可能由程序修复,所以在设计应用时很少考虑捕获它们[^3]。 #### 2. **Exception** `Exception` 则表示程序执行期间可能出现的各种意外情况,这类问题是可以通过编写代码来预防或者解决的。根据是否强制要求处理,`Exception` 可分为两大类: - **Checked (受检) Exceptions**: 这些异常必须显式声明 (`throws`) 并在其调用处进行处理(要么捕获,要么继续向上抛)。例如 `IOException`, `SQLException` 等都属于此类。 - **Unchecked (非受检) Exceptions**: 即运行时异常(`RuntimeException`)及其子类,比如 `NullPointerException`, `ArrayIndexOutOfBoundsException` 等。对于这种类型的异常,编译器不会强迫开发人员去处理,但如果发生则可能导致程序崩溃[^4]。 下面是一个简单的对比表: | 特性 | Error | Checked Exception | Unchecked Exception | |-----------------|--------------------------------|----------------------------------|--------------------------------| | 继承关系 | java.lang.Throwable | java.lang.Exception | java.lang.RuntimeException | | 是否可恢复 | 不可恢复 | 大多可通过修改输入等方式恢复 | 部分可能恢复 | | 使用场景 | 系统级致命错误 | 方法间传递数据失败等情况 | 编码失误引起的小概率事件 | --- ### 总结 综上所述,在实际开发工作中合理运用自定义异常能够显著提高系统的健壮性用户体验;而理解清楚 `Error` `Exception` 的差异有助于更精准地定位问题根源以及采取恰当措施应对不同种类的问题^. ```java try{ throw new MyCustomException("This is a custom exception."); }catch(MyCustomException e){ System.out.println(e.getMessage()); } ``` 上述代码片段展示了如何手动触发并捕捉到之前定义好的自定义异常实例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark_to_win

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值