阿里二面面试题:请你说一下对受检异常和非受检异常的理解?

本文介绍了Java中受检异常和非受检异常的概念及区别,强调了异常在程序设计中的重要性。受检异常需要在编译期间捕获,如IOException,而非受检异常如NullPointerException则在运行时发生。文章还提供了Error和Exception的解释,以及异常处理的最佳实践。最后,探讨了一道面试题:NoClassDefFoundError和ClassNotFoundException的区别。
摘要由CSDN通过智能技术生成

面试题:请你说一下对受检异常和非受检异常的理解?

面试考察点

考察目的:异常的设计,在程序开发中是非常重要的。好的异常设计能够合理清晰的反馈程序的问题,提供排查思路。同时,还能够很好的处理资源回收问题。所以作为有经验的程序员,必须要了解异常,以及异常的差异和特性。

考察人群:工作3年以上,3年左右一般都会参与项目中部分核心代码的编写。

背景知识分享

在Java中,所有的异常都继承自java.lang.Throwable,Throwable有两个直接子类,Error和Exception,如图所示。

图片

Throwable 类是 Java 语言中所有错误(errors)异常(exceptions)的父类。只有继承于Throwable类或者其子类的异常才能够被抛出.

下面分别解释一下这些异常以及特性。

Error错误

Error通常是程序无法处理的错误,这些错误大多数与代码编写者执行的操作无关,并且它们是无法被捕获的,因为它们在应用程序的控制和处理能力之外,比如。

  1. OutOfMemoryError, 内存溢出,比较常见的错误,是指内存空间不足以再提供新对象的分配。

  2. StackOverflowError,栈溢出。

以下是模拟程序中出现Error问题的例子。

  • 编写一段使用内存存储的程序

    public class ErrorException {
    
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            /*循环创建对象,消耗堆内存*/
            for (int i= 0;i < 100000;i++){
                list.add(new String("Hello World"));
            }
        }
    }
  • 为了演示OOM错误,需要调整堆内存空间大小,添加VM option。

    把堆内存空间设置为1兆,这个内存空间非常小,所以很容易出现OOM错误。

    -Xmx1m
  • 执行上面这段程序,错误信息如下.

    错误信息中描述的是ArrayList在扩容时,发现堆内存空间不足,所以抛出OOM错误。

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Arrays.java:3210)
        at java.util.Arrays.copyOf(Arrays.java:3181)
        at java.util.ArrayList.grow(ArrayList.java:267)
        at java.util.ArrayList.ensureExplicitCa
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值