对Error和Exception的理解
学习了错误和异常后,有所理解,在文章末尾会有我学习过程中的疑问以及对他们的理解。
- Error和Exception分别是什么
- Error:Error 是指正常情况下,不大可能出现的情况,绝大部分的Error 都会导致程序处于非正常的,不可恢复的状态, 不需要捕获, 常见的OutOfMemoryError 是Error的子类.
描述了Java运行时系统的内部错误和资源耗尽错误。
2.Exception:Exception 分为可检查异常(checked)和不可检查异常(unchecked).可检查异常在源代码里必须显式的进行捕获处理,这是编译期检查的一部分,不可检查异常是指运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求.
注意:Error 和 Exception 都是Throwable的子类, 在java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型。
- Error和Exception的分类
1.Error:不是程序本身的问题
如果发生此类内部错误,除了通知用户并尝试正常终止程序之外,您几乎无能为力。
用户输入错误用户输入错误
除了不可避免的错别字外,一些用户喜欢开辟自己的道路而不是遵循指示。
例如 用户要求连接到语法错误的 URL,网络层会抱怨。
设备错误
硬件并不总是按照您的意愿行事。
打印机可能已关闭。
网页可能暂时不可用。
设备在执行任务时经常会出现故障。
物理限制物理限制
磁盘可以填满
您可能会耗尽可用内存
2.Exception:
RuntimeException(运行时异常):
其他异常:
ClassNotFoundException:找不到具有指定名称的类的定义
DataFormatException:数据格式异常
IOException:输入输出异常
SQLException:提供有关数据库访问错误或其他错误的信息的异常
FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常
EOFException:当输入过程中意外到达文件或流的末尾时,抛出此异常
- checked和unchecked异常及理解
unchecked异常包括error和RuntimeException
checked异常是其它的异常
可能会疑问他们之间有什么区别和联系呢,以下是我自己的理解:
先抛开error不谈,就RuntimeException而言,如果出现,那么一定是就是你自己的问题,这种异常不会在编译时报错,只有在运行时才会出错,比如说数组下表越界这种很经典的问题。那你可能会疑问,它为什么是unchecked的呢,因为既然是你自己的错误,并且编译时不会报错,那么你可以直接通过修改你自己的代码就可以消除这种异常,没有必要再去捕获,多此一举,没有任何作用。
举个例子:
它不会报错,可以运行。
你们觉得这有用吗,不还是要通过自己修改吗。
而那些checked异常呢,它们又是怎么回事呢,简单来说,其实意思就是即便你的程序代码啥的都是正确的并且你也对一些可能出错的地方进行了验证,但是仍然可能出现错误,即是你无法完全控制的外在问题导致的。这种异常在编译时就会报错,你根本运行不了,比如说你要读入一个文件,即便你确定你写的地址没有问题,你也确定这个文件各个方面都没问题,但是如果你没有进行异常的处理,编译器还是会给你报错,谁说它没有问题它就一定能正常打开呢,它万一就打开失败了呢。