首页 > 试题广场 >

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

[问答题]
Java中的两种异常类型是什么?他们有什么区别?
Throwable类包含两个子类,一个是Exception(异常),一个是error(错误)。 一般,error及其子类是代表由于系统本身的错误,程序无法继续进行下去,如OutOfMemeryError和StackOveFlowr,这时虚拟机会终止此线程。 而Exception及其子类又分为运行时异常(非检查异常)和非运行时异常(检查异常)。运行时异常是由于程序的逻辑设计存在问题,编译时不会被检测,如IndexOutOfBoundException和NullPointerException,在编写程序时可以自行决定捕捉不捕捉异常。而非运行时异常,则必须在程序块捕捉或在方法上抛出异常才可以进行编译,如IoException与sqlException
编辑于 2018-05-27 09:09:19 回复(0)
更多回答
Throwable包含了错误(Error)和异常(Excetion两类)
Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常)
(1) Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等, 这些异常发生时, java虚拟机一般会终止线程 .
(2) 运行时异常都是RuntimeException类及其子类,如 NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常, 是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免.
(3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的, 否则不能通过编译. 如IOException、SQLException等
发表于 2015-12-20 19:21:42 回复(9)

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)
zll头像 zll
java有俩种异常类型:受检查异常和不受检查检查异常
检查异常,这些异常从程序的角度来说是必须经过捕捉处理的,否则编译通不过,比如IOException,SQLException。
不受检查异常:
可分为Error和运行时异常,Error是程序无法处理的如OutOfMemoryError,如果出现Error,java虚拟机会终止线程。
运行时异常,如RunTimeException,IndexOutOfBoundsException,NullPointerException,这些异常一般是由程序的逻辑错误引起的,解决此类异常应该仔细排查程序,不需要进行检查。
发表于 2016-03-19 21:21:20 回复(2)

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

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

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

2、受检查异常

除了运行异常外,其他异常都属于受检查异常,这种异常的特点是要么用 try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。

两者的区别

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

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

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

编辑于 2017-02-09 09:53:24 回复(0)
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)

unchecked exception(非检查异常)

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

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

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

发表于 2018-06-22 21:21:22 回复(0)
检查异常:(编译器必须处理的异常)除error,runtimeexception及其子类以外,其他的Exception类及其子类都是检查异常。该异常特点是java编译器检查,即当程序中出现异常时,要么用try-catch语句捕获,要么用throws子句声明抛出,否则编译不通过。 非检查异常:(编译器不要求处置的异常),包括运行时异常(runtimeexception及其子类)和错误(error)
发表于 2015-11-19 10:03:38 回复(0)
Throwable包含了错误error和异常exception两类
exception又包含了运行时异常(RuntimeException,又叫非检查异常unchecked),和非运行时异常(又叫检查异常checked)
  1. error是程序无法处理了,如OutOfMemoryError,等这些异常发生时,jvm一般会终止线程。
  2. 运行时异常都时RuntimeException类及其子类,如NullPointerException,IndexOutOfBoundsException等,这些异常时不检查的异常,是在程序运行的时候可能发生的,所以程序可以捕捉,也可以不捕捉,这些错误一般是又程序的逻辑错误引起的,程序应该从逻辑角度区尽量避免。
  3. 检查异常时运行时异常以为的异常,也是Exception及其子类,这些异常从程序的角度来说时必须经过捕捉检查处理的,否则不能通过编译,如IOException,SQLException,等。
发表于 2016-03-25 22:47:53 回复(0)
Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常) (1) Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等, 这些异常发生时, java虚拟机一般会终止线程 . (2) 运行时异常都是RuntimeException类及其子类,如 NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常, 是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免. (3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的, 否则不能通过编译. 如IOException、SQLException等
发表于 2021-08-15 09:47:00 回复(0)

<p>exception类型</p>检查异常和非检查异常,编译异常和运行时异常

编辑于 2020-05-22 07:25:58 回复(0)

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

发表于 2020-03-07 21:03:37 回复(0)

runtimeexception运行时异常,

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

编辑于 2020-03-04 12:27:29 回复(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)
如果要分成两大类,那就是 必检异常 和 免检异常

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

对于RuntimeException及其子类,还有Error及其子类,属于Java免检异常。比如IndexOutOfBoundsException,NullPointerException,一般这种RuntimeException类型的异常都是由于程序的逻辑错误引起的,在编码的时候就可以避免,因此没必要进行检查。(比如对数组操作得当,使用对象之前先用if判断是否为null,都可以直接避免IndexOutOfBounds,NullPointer)
而Error及其子类,表明程序已经发生了严重错误,比如OutOfMemoryException,StackOverflow,这种情况程序应该直接终止,那就更不需要在运行时检查了,因为没必要修复了,那就更不需要catch。

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


编辑于 2019-09-16 08:51:48 回复(0)
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。
发表于 2019-04-27 21:09:18 回复(0)
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。
发表于 2019-04-27 19:49:09 回复(0)
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。
发表于 2019-04-26 23:05:45 回复(0)
schecked异常,需要捕获或者抛出,不然无法编译 runtime异常,不处理也可以编译,但抛错时会崩溃
发表于 2019-02-26 23:19:50 回复(0)
Java中两种异常包括运行时异常和非运行时异常。两者之间最大的区别为:前者一般是程序的逻辑错误,在运行时可能会发生的异常,所以可以捕获也可以不捕获;后者必须使用throws抛出异常或者使用try catch进行捕获处理。
编辑于 2018-09-03 08:10:58 回复(0)