冷丁网 > 生活 > 正文

​Java中Error和Exception的异同

2024-02-24 20:05 来源:冷丁网 点击:

Java中Error和Exception的异同


Error(错误)和Exception(异常)都是java.lang.Throwable类的子类,在Java代码中只有继承了Throwable类的实例才能被throw或者catch。

Exception和Error体现了Java平台设计者对不同异常情况的分类,Exception是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。Error是指正常情况下不大可能出现的情况,绝大部分的Error都会导致程序处于非正常、不可恢复状态。所以不需要被开发者捕获。

Error错误是任何处理技术都无法恢复的情况,肯定会导致程序非正常终止。并且Error错误属于未检查类型,大多数发生在运行时。Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。不检查异常就是所谓的运行时异常,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。

如下是常见的Error和Exception:

1)运行时异常(RuntimeException):

NullPropagation:空指针异常;

ClassCastException:类型强制转换异常

IllegalArgumentException:传递非法参数异常

IndexOutOfBoundsException:下标越界异常

NumberFormatException:数字格式异常

2)非运行时异常:

ClassNotFoundException:找不到指定class的异常

IOException:IO操作异常

3)错误(Error):

NoClassDefFoundError:找不到class定义异常

StackOverflowError:深递归导致栈被耗尽而抛出的异常

OutOfMemoryError:内存溢出异常

例1

下面代码会导致Java堆栈溢出错误。

// 通过无限递归演示堆栈溢出错误


class

StackOverflow

{


public

static

void

test

(

int

i){

if

(i ==

0

) {

return

; }

else

{ test(i++); } } }

public


class

ErrorEg

{


public

static

void

main

(String[] args)

{

// 执行StackOverflow方法

StackOverflow.test(

5

); } }

1234567891011121314151617

复制代码类型:[java]

运行输出为:

Exception

in

thread

main

java

.lang

.StackOverflowError

at

ch11

.StackOverflow

.test

(

ErrorEg

.java

:9)

at

ch11

.StackOverflow

.test

(

ErrorEg

.java

:9)

at

ch11

.StackOverflow

.test

(

ErrorEg

.java

:9)

at

ch11

.StackOverflow

.test

(

ErrorEg

.java

:9)12345

复制代码类型:

[java]

上面代码通过无限递归调用最终引发了

java.lang.StackOverflowError错误。

开课吧广场-人才学习交流平台