Java中的异常分类[乐乐独记]
2021/9/7 9:36:14
本文主要是介绍Java中的异常分类[乐乐独记],对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java中的异常分类[乐乐独记]
- 1、什么是异常
- 2、异常的大体分类
- 3、异常分类解释
- 3.1、Error异常
- 3.1.1、OutOfMemoryError异常
- 3.1.2、NoClassDefFoundError异常
- 3.2、Exception异常
- 3.2.1、RuntimeException异常
- 3.2.1.1、NullPointerException (空指针异常)
- 3.2.1.2、ClassCastException (类型转换异常)
- 3.2.1.3、IndexOutOfBoundsException (越界异常)
- 3.2.1.4、IllegalArgumentException (非法参数异常)
- 3.2.1.5、 ArrayStoreException (数组存储异常)
- 3.2.1.6、AruthmeticException (算术异常)
- 3.2.1.7、BufferOverflowException(缓冲区溢出异常)
- 3.2.2、non-RuntimeException异常
- 4、其它
- 4.1、Error和Exception有什么区别?
- 4.2、检查型异常 (CheckedException)和 非检查型异常 (UncheckedException)有什么区别?
1、什么是异常
异常,根据字面理解,有意外之意。把它置于代码层面来理解,即阻止了当前方法或作用域继续执行。
2、异常的大体分类
异常的答题分类我画了一张图,可看下面的图
在上面这张图中可以看出,异常的基类是Throwable,它下面派生的Error和Exception,通常情况下,在对异常的理解的时候,我们一般只需要搞清楚以下这么几个问题就可以了:
1、Error和Exception有什么区别?
2、检查型异常 (CheckedException)和 非检查型异常 (UncheckedException)有什么区别?
以上两个问题在本篇博客的最后面解释。
3、异常分类解释
3.1、Error异常
ERROR 属于编译错误或系统错误,也属于严重错误,系统不可恢复,会导致系统终止运行 比如 OutOfMemoryError、NoClassDefFoundError
3.1.1、OutOfMemoryError异常
OutOfMemoryError是系统内存溢出,就是字面意思,系统内存不够用了。
3.1.2、NoClassDefFoundError异常
这个异常的意思是在系统运行过程中找不到系统的class文件了,然后报此错误,所以我们如果想复现这个报错的话,可以在编译完成之后,在系统的运行过程中删除已经生成的class文件,然后再让系统去调用这个class文件,就会报NoClassDefFoundError异常。
3.2、Exception异常
3.2.1、RuntimeException异常
RuntimeException(运行时异常),简单理解为在Java代码的运行过程中异常。
3.2.1.1、NullPointerException (空指针异常)
Java代码中在对null对象做操作的时候,抛出的异常。
3.2.1.2、ClassCastException (类型转换异常)
就比如字符串“aa”转化成Int类型时报错,就会抛出ClassCastException (类型转换异常)。
3.2.1.3、IndexOutOfBoundsException (越界异常)
比如说一个数组的下表最大是5,而代码中访问了6,抛出IndexOutOfBoundsException (越界异常)。
3.2.1.4、IllegalArgumentException (非法参数异常)
比如说代码中我们将一个字符串“33”要转成日期格式,就会抛出IllegalArgumentException (非法参数异常)错误,代码示例如下:
@Test public void illegalArgumentExceptionTest(){ String testTime = "33"; /** 格式化转换成我们想要的格式**/ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** 格式化long类型的时间戳**/ String finalTime = sdf.format(testTime); System.out.println("你好:" + finalTime); }
3.2.1.5、 ArrayStoreException (数组存储异常)
在数组存值的时候,类型转换错误,代码示例如下:
@Test public void arrayStoreExceptionTest (){ Object[] array = new String[2]; array[1] = new Integer(1); }
由于在语法检查时,由于是Object类型的array,所以,语法检查不会报错,但是array内部是子类String类型实现的,所以在程序运行时,需要从Integer存储到String中,结果就会抛出 ArrayStoreException (数组存储异常)。
3.2.1.6、AruthmeticException (算术异常)
在进行数学计算时抛出的错误,代码示例如下:
@Test public void aruthmeticExceptionTest(){ int index = 1 / 0; }
3.2.1.7、BufferOverflowException(缓冲区溢出异常)
代码示例如下:
@Test public void bufferOverflowExceptionTest(){ // 这里只分配了2个字节,下面的params.put(tmp);却put了3个字节的数据。所以导致 java.nio.BufferOverflowException 异常 ByteBuffer params = ByteBuffer.allocate(2); byte[] tmp = new byte[3]; tmp[0] = (byte) 1; tmp[1] = (byte) 8; params.put(tmp); }
3.2.2、non-RuntimeException异常
non-RuntimeException(非运行时异常),意思就是不是Java代码运行过程的异常比如,在访问数据库的时候SQLException(数据脚本执行异常),超时时TimeoutException(超时异常),类没有找到时ClassNotFoundException(类未找到),以及IO异常IOException(IO异常),等等。
4、其它
4.1、Error和Exception有什么区别?
这里只需要记住两个名词,可预料、不可预料
Error和Exception都是继承于 Throwable 类,在Java中只有 Throwable 类才可以被抛出(throw)或者捕捉(try/catch)。
Error是不可预料的,这种异常发生之后,是不可恢复的,就比如,内存溢出错误(OutOfMemoryError)、类未定义错误(NoClassDefFoundError)。
Exception是可预料的,可以用try/catch捕捉到这种异常,然后抛出或者记录到日志中。
4.2、检查型异常 (CheckedException)和 非检查型异常 (UncheckedException)有什么区别?
这里需要记住两个名词,可避免、不可避免
检查型异常和非检查型异常都属于Exception的分类下。
检查型异常是不可避免的,比如TimeoutException(超时异常)、IOException(IO异常)等,在方法上必须主动抛出。
非检查型异常是可避免的,比如NullPointerException (空指针异常)、 AruthmeticException (算术异常) 等这些是可以通过代码规范来避免的。
这篇关于Java中的异常分类[乐乐独记]的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现