java中的异常类型_Java中的两种异常类型是什么?他们有什么区别?

99

Throwable包含了错误(Error)和异常(Excetion两类)

Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常)

(1) Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等,

这些异常发生时, java虚拟机一般会终止线程 .

(2) 运行时异常都是RuntimeException类及其子类,如

NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常,

是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免.

(3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的,

否则不能通过编译. 如IOException、SQLException等

发表于 2015-12-20 19:21:42

回复(8)

61

Throwable是所有异常的根,java.lang.Throwable

Error是错误,java.lang.Error

Exception是异常,java.lang.Exception

二、Exception

一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。

①Checked异常

只有java语言提供了Checked异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种

1 当前方法知道如何处理该异常,则用try...catch块来处理该异常。

2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException

Java.lang.NoSuchMetodException

java.io.IOException

②RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException

Java.lang.ArrayStoreExcetpion

Java.lang.ClassCastException

Java.lang.IndexOutOfBoundsException

Java.lang.NullPointerException

三、Error

当程序发生不可控的错误时,通常做法是通知用户并中止程序的执行。与异常不同的是Error及其子类的对象不应被抛出。

Error是throwable的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。

Error由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等。程序对其不做处理。

发表于 2017-03-27 16:13:58

回复(0)

18

java有俩种异常类型:受检查异常和不受检查检查异常

检查异常,这些异常从程序的角度来说是必须经过捕捉处理的,否则编译通不过,比如IOException,SQLException。

不受检查异常:

可分为Error和运行时异常,Error是程序无法处理的如OutOfMemoryError,如果出现Error,java虚拟机会终止线程。

运行时异常,如RunTimeException,IndexOutOfBoundsException,NullPointerException,这些异常一般是由程序的逻辑错误引起的,解决此类异常应该仔细排查程序,不需要进行检查。

发表于 2016-03-19 21:21:20

回复(2)

6

异常分两种大的异常类型,运行异常和受检查异常,这两种异常的区别:

1、运行时异常((RuntimeException, 又叫非检查异常)

运行异常的特点是

Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。

2、受检查异常

除了运行异常外,其他异常都属于受检查异常,这种异常的特点是要么用

try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。

两者的区别

非检查异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。

受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。

对于运行异常,建议不要用

try...catch...捕获处理,应该在程序开发调试的过程中尽量的避免,当然有一些必须要处理的,自己知道了那个部分会出现异常,而这种异常你要把它处理的你想要的结果,例如:空值处理。

编辑于 2017-02-09 09:53:24

回复(0)

2

Throwable包含了错误(Error)和异常(Excetion两类)

Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常) (1)

Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等, 这些异常发生时,

java虚拟机一般会终止线程 . (2) 运行时异常都是RuntimeException类及其子类,如

NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常,

是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免.

(3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的,

否则不能通过编译. 如IOException、SQLException等

发表于 2016-03-14 21:07:45

回复(0)

1

unchecked exception(非检查异常)

也称运行时异常(RuntimeException),比如常见的NullPointerException、IndexOutOfBoundsException。对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。

checked exception(检查异常,编译异常)

也称非运行时异常(运行时异常以外的异常就是非运行时异常),java编译器强制程序员必须进行捕获处理,比如常见的IOExeption和SQLException。对于非运行时异常如果不进行捕获或者抛出声明处理,编译都不会通过。

发表于 2018-06-22 21:21:22

回复(0)

2

Throwable包含了错误error和异常exception两类

exception又包含了运行时异常(RuntimeException,又叫非检查异常unchecked),和非运行时异常(又叫检查异常checked)

error是程序无法处理了,如OutOfMemoryError,等这些异常发生时,jvm一般会终止线程。

运行时异常都时RuntimeException类及其子类,如NullPointerException,IndexOutOfBoundsException等,这些异常时不检查的异常,是在程序运行的时候可能发生的,所以程序可以捕捉,也可以不捕捉,这些错误一般是又程序的逻辑错误引起的,程序应该从逻辑角度区尽量避免。

检查异常时运行时异常以为的异常,也是Exception及其子类,这些异常从程序的角度来说时必须经过捕捉检查处理的,否则不能通过编译,如IOException,SQLException,等。

发表于 2016-03-25 22:47:53

回复(0)

0

exception类型

检查异常和非检查异常,编译异常和运行时异常

编辑于 2020-05-22 07:25:58

回复(0)

0

分为两种,受检查的checked异常和不受检查的runtime exception异常。前者必须做异常捕获,后者不必。

发表于 2020-03-07 21:03:37

回复(0)

0

runtimeexception运行时异常,

非运行时异常需要处理异常,才能正常运行程序

编辑于 2020-03-04 12:27:29

回复(0)

0

链接:https://www.nowcoder.com/questionTerminal/3ded1983c85c4ae197e005bd31777bc7

来源:牛客网

Throwable包含了错误(Error)和异常(Excetion两类)

Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常)

(1) Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等, 这些异常发生时, java虚拟机一般会终止线程 .

(2) 运行时异常都是RuntimeException类及其子类,如 NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常, 是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免.

(3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的, 否则不能通过编译. 如IOException、SQLException等

发表于 2020-02-09 11:28:03

回复(0)

0

如果要分成两大类,那就是 必检异常 和 免检异常。

Java异常的根接口是Throwable,它有两个子类,Error 和 Exception。Exception分为RuntimeException和其他Exception。如下图:(下图的IOException应为:其他Exception)

1fb071941ac08f1b46dde8e075fcf920.png

对于RuntimeException及其子类,还有Error及其子类,属于Java免检异常。比如IndexOutOfBoundsException,NullPointerException,一般这种RuntimeException类型的异常都是由于程序的逻辑错误引起的,在编码的时候就可以避免,因此没必要进行检查。(比如对数组操作得当,使用对象之前先用if判断是否为null,都可以直接避免IndexOutOfBounds,NullPointer)

而Error及其子类,表明程序已经发生了严重错误,比如OutOfMemoryException,StackOverflow,这种情况程序应该直接终止,那就更不需要在运行时检查了,因为没必要修复了,那就更不需要catch。

其他的异常属于必检异常,

比如IOException,ClassNotFoundException,这种类型的异常是由外部其他条件所引起的,并不是编码所能决定的(比如我们编码无法影响文件是否存在,而文件存在就不会抛出异常,但文件不存在会抛出异常),因此这种类型的异常就需要在代码中检查。

编辑于 2019-09-16 08:51:48

回复(0)

0

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。

发表于 2019-04-27 21:09:18

回复(0)

0

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。

发表于 2019-04-27 19:49:09

回复(0)

0

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。

发表于 2019-04-26 23:05:45

回复(0)

0

schecked异常,需要捕获或者抛出,不然无法编译 runtime异常,不处理也可以编译,但抛错时会崩溃

发表于 2019-02-26 23:19:50

回复(0)

0

Java中两种异常包括运行时异常和非运行时异常。两者之间最大的区别为:前者一般是程序的逻辑错误,在运行时可能会发生的异常,所以可以捕获也可以不捕获;后者必须使用throws抛出异常或者使用try catch进行捕获处理。

编辑于 2018-09-03 08:10:58

回复(0)

0

Throwable类包含两个子类,一个是Exception(异常),一个是error(错误)。 一般,error及其子类是代表由于系统本身的错误,程序无法继续进行下去,如OutOfMemeryError和StackOveFlowr,这时虚拟机会终止此线程。 而Exception及其子类又分为运行时异常(非检查异常)和非运行时异常(检查异常)。运行时异常是由于程序的逻辑设计存在问题,编译时不会被检测,如IndexOutOfBoundException和NullPointerException,在编写程序时可以自行决定捕捉不捕捉异常。而非运行时异常,则必须在程序块捕捉或在方法上抛出异常才可以进行编译,如IoException与sqlException

编辑于 2018-05-27 09:09:19

回复(0)

0

--Throwable:所有异常和错误的基类

--Error错误:Java运行系统中的内部错误以及资源耗尽的情形,应用程序不应该抛出这种类型的对象

--Expection异常:表示需要捕捉或者需要程序进行处理的异常

==RuntimeException:例如 空指针异常  数组越界异常 一定是程序员的错误

==InterruptedException

==IOException

--运行时异常(未检查异常):运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常

==Error:java系统的内部错误

==RuntimeException及其子类成为未检查异常(unchecked),一旦抛出立即停止,需要程序员检查并更改

--受检查异常:是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理),一般是外部错误

==java可以自动检测和分析的异常,一般通过throws或try-catch语句块处理

发表于 2018-04-12 15:41:29

回复(0)

0

Throwable接口有两个实现Error和Exception;

Error指的是程序无法处理的错误,如OutOfMemory错误、

Exception包括运行时异常(非检查异常)和编译时异常(可检查异常),运行时异常一般不需要程序员自己trycatch或者throw,如nullpointerexception、numberformatexception,能通过但不能运行过去,

编译时异常就需要程序员自己try catch或throw,并写出解决方案使程序编译通过

发表于 2018-03-16 14:36:11

回复(0)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值