前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Exception和Error 有什么区别

Exception和Error 有什么区别

作者头像
王小明_HIT
发布于 2019-10-14 16:17:40
发布于 2019-10-14 16:17:40
1.9K00
代码可运行
举报
文章被收录于专栏:程序员奇点程序员奇点
运行总次数:0
代码可运行

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

  • Error 类通常指的是 Java 运行时系统内部错误或者资源耗尽错误。应用程序不会抛出该类对象,如果出现这样的错误,除了告知用户,剩下的就是尽量使得程序安全的终止。
  • 常见的 Error 有:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NoClassDefFoundError ,VirtualMachineError, OutOfMemoryError,StackOverflowError
  • Exception 又有两个分支,一个是运行时异常, RuntimeException ,一个是 CheckedException 。
  • RuntimeException指的是
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NullPointException ,ClassCastException ,ClassNotFoundException
  • RuntimeException 一定是程序的错误。
  • CheckedException 指的是 I/O 错误导致的
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IOException 、SQLException

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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"); //实例化异常
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
阿里面试:什么地方违反了双亲委派模型
类加载机制是指将类的class文件读入到内存,并为之创建一个java.lang.Class对象。中间对数据做了 校验,转换解析和初始化等操作。
哲洛不闹
2019/08/20
2.6K0
阿里面试:什么地方违反了双亲委派模型
双亲委派模型:大厂高频面试题,轻松搞定
文章内容相对较长,但如果你希望对 Java 的类加载过程有个更深入的了解,同时增加自己的面试技能点,请耐心读完......
用户4172423
2019/09/04
6490
双亲委派模型:大厂高频面试题,轻松搞定
【jvm】通过JDBC为例谈谈双亲委派模型的破坏
双亲委派模型并不是一个强制约束模型,而是java设计者推荐给开发者的类加载实现方式;但是也会有例外; 今天我们主要来讲一讲 类似于SPI这种设计导致的双亲委派模型被“破坏”的情况;
石臻臻的杂货铺[同名公众号]
2021/07/14
1.2K0
面试官:说说如何打破或违反双亲委派!
SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中,在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想:我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块、xml解析模块、jdbc模块等方案。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。
业余草
2021/12/06
2.2K0
面试官:说说如何打破或违反双亲委派!
聊聊类加载器与双亲委派模型
我们经常会在面试中遇到有关类加载器的问题,而作为一名Java开发人员应该了解类加载器如何工作?双亲委派模型是什么?如何打破双亲委派?为什么打破?等等。所以今天的主题就是聊一聊类加载器。
pjmike
2020/03/22
8530
类加载器以及双亲委派模型
首先我们来描述一个小说场景,通过这个场景在去理解我们相关的类加载器的执行以及双亲委派模型。
胖虎
2019/06/26
4600
类加载器以及双亲委派模型
类加载过程,双亲委派模型?
java通过字节码和JVM机制,提供了强大的跨平台能力,理解Java的类加载机制能让我们更加了解java的运行过程
袁新栋-jeff.yuan
2020/08/26
3290
类加载过程,双亲委派模型?
相关推荐
阿里面试:什么地方违反了双亲委派模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档