Exception和Error 有什么区别

简介: Exception和Error 有什么区别

这里考察的是 Java 异常处理机制

  • Error 类通常指的是 Java 运行时系统内部错误或者资源耗尽错误。应用程序不会抛出该类对象,如果出现这样的错误,除了告知用户,剩下的就是尽量使得程序安全的终止。
  • 常见的 Error 有:


NoClassDefFoundError ,VirtualMachineError, OutOfMemoryError,StackOverflowError
  • Exception 又有两个分支,一个是运行时异常, RuntimeException ,一个是 CheckedException 。
  • RuntimeException指的是


NullPointException ,ClassCastException ,ClassNotFoundException


  • RuntimeException 一定是程序的错误。
  • CheckedException 指的是 I/O 错误导致的


IOException 、SQLException
  • checkedException 一般是外部错误,这个异常发生在编译阶段。Java 编译器会强制去捕获此类异常。一般会要求把这段可能出现的异常程序进行 try catch。


640.jpg


曾经开发过程中有一同学就遇到这样的问题,程序跑的好好的,并且程序进行 try catch 了,但是程序再往下执行时就出错。但是一直在想,都Catch 住了啊,为啥没看到报错日志呢,是不是程序没有运行,后来才发现其实这个就是忘记了 Error 这个出异常了,但是没有Catch。


简单的说是 Error 和 Exception 都继承了 Throwable

Error 是程序无法处理的错误,出现这个错误,只能终止程序或者修改代码。Exception 是程序可以处理的异常,捕获后可恢复。


import java.util.ArrayList;
import java.util.List;
public class TestError {
    public static void main(String args[]){
        List<User> users = new ArrayList<User>(2); // 为啥两次就是为了打出NoClassDefFoundError
        for(int i=0; i<2; i++){
            try{
                users.add(new User(String.valueOf(0))); //will throw NoClassDefFoundError
            }catch(Error e){
                System.out.println("Catch Error "+e);
            }catch(Exception t){
                System.out.println("Catch Exception");
                t.printStackTrace();
            }
        }
        try{
            divsion(1,0);
        }catch(Error e){
            System.out.println("Catch Error "+e);
        }catch(Exception t){
            System.out.println("Catch Exception"+t);
//            t.printStackTrace();
        }
    }
    public static int divsion(int i, int j) throws Exception {
        int k = i / j;
        return k;
    }
}
class User{
    private static String USER_ID =  getUserId();
    public User(String id){
        this.USER_ID = id;
    }
    private static String getUserId() {
        throw new RuntimeException("UserId Not found"); //实例化异常
    }
}


相关文章
|
自然语言处理 API 索引
ElasticSearch实战教程PostMan版(超级详细版)
ElasticSearch实战教程PostMan版(超级详细版)
ElasticSearch实战教程PostMan版(超级详细版)
|
编解码
OTT与IPTV的区别是什么?
OTT与IPTV的区别是什么?
501 0
|
JavaScript 开发者
【TypeScript 技术专栏】TypeScript 与 ESLint 代码规范
【4月更文挑战第30天】TypeScript和ESLint是代码规范的关键工具。TypeScript通过静态类型检查、接口与模块系统提升代码质量;ESLint则负责语法检查、风格统一和最佳实践。两者结合使用,提供全面的代码规范保障。制定团队共识、保持灵活性并持续优化规范是关键。常见问题包括类型不匹配、风格不一致和未使用变量,可通过这两工具解决。实际案例分析进一步说明了它们在项目中的应用。重视代码规范,利用这些工具,能提高代码质量和开发效率。
268 0
|
SDN 云计算 网络虚拟化
解析云网新趋势 - 云网融合
云网融合,即将云计算与传统网络技术相融合,实现网络与云服务的协同工作。其目标是提高网络资源的利用率、灵活性和自动化程度,以满足不断复杂化和多样化的网络需求。
|
开发工具
Vim教程:深入了解如何删除换行符
【4月更文挑战第3天】
605 1
Vim教程:深入了解如何删除换行符
|
小程序
知道这些,商标申请更易通过!
知道这些,商标申请更易通过!
413 1
知道这些,商标申请更易通过!
|
存储 缓存 资源调度
Vite 是如何发布 npm 包的?
Vite 是如何发布 npm 包的?
523 1
|
SQL 缓存 搜索推荐
Gorm学习(三)基础:迁移(数据库建表以及字段设置)
在项目开发中,我们可能会随时调整声明的模型,比如添加字段和索引,使用 GORM 的自动迁移功能,可以始终让我们的数据库表结构保持最新。
1444 0
Gorm学习(三)基础:迁移(数据库建表以及字段设置)
|
Ubuntu Python 定位技术
CSI室内指纹定位——CSI数据说明
CSI室内指纹定位——CSI数据说明
632 0