Error:
Error类及子类的实例代表了JVM本身的错误,错误不能被程序员通过代码来处理,
Exception:
异常,代表程序运行时发生的各种不期望发生的事件,可以被Java异常机制使用。
非检查异常:(unchecked exception):
RuntimeException类极其子类表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)这样的异常,也可以不处理。
检查异常:(checked exception),除了error和runtimeException的其他异常。
编译器会检查此类异常,如果程序中出现此类异常,比如说IOException,必须处理,要么try catch,要么throws抛出,否则编译不通过。
面试问:
1。Java中,throw和throws的区别是什么
throw使用的位置在方法中。表示抛出具体异常。抛出的是一个异常实体类,若执行了Throw,一定是抛出了某种异常
throws使用的方法在方法的声明上。如果抛出异常,则由方法的调用者来异常处理。 throws是抛出异常的类型。而且不一定会抛出异常,只是可能。
void Test throws IOException{
try{
///
}catch(Exception e){
throw e;
}
}
2. Java中 Error和Exception的区别。
Error是JVM内部错误,不能通过代码修改,
Exception是程序需要捕捉、需要处理的异常。是由程序设计的不完善出现的问题。
3. Java受检的异常和不受检的异常区别。
被检查的异常应该用try-catch,或throws关键字抛出。 ClassNotFoundException 属于Checked Exception
不受检查的异常在程序中不要求被处理或throws抛出。
4. Java中什么是异常链。
异常链是指在进行一个异常处理时抛出了另外一个异常,由此产生了一个异常链条,大多用于将受检查异常(checked exception)封装成为非受检查异常(unchecked exception)或者 RuntimeException。特别注意如果你因为一个异常而决定抛出另一个新的异常时一定要包含原有的异常,这样处理程序才可以通过 getCause() 和 initCause() 方法来访问异常最终的根源。
问:java 中什么时候使用断言(assert)?
答:断言在开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本、关键的正确性,断言检查通常在开发和测试时开启,为了保证程序的执行效率,在软件发布后断言检查通常是关闭的,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true,如果表达式的值为 false 则系统会报告一个 AssertionError。