java基础面试题整理2-异常

Posted 萝卜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础面试题整理2-异常相关的知识,希望对你有一定的参考价值。

异常

1.异常的概述

异常是一些用来封装错误信息的对象.它由异常的类型、提示信息、报错的行号提示三部分组成

2.异常的继承结构

Throwable:顶级父类  
 --Error:系统错误,无法修复
 --Exception:可以修复的错误
    --RunTimeException/此类及其子类,表示 JVM 在运行期间可能出现的异常。
       --ClassCastException
       --ClassNotFoundException
       --...

3.常见处理异常的两种方式

1).捕获异常(try catch)--直接处理可能出现的异常.

try{
    需要捕获的代码
}catch(异常类型 异常名){
    处理方案
}

2).声明异常(throws)--声明告诉调用者可能的异常,暴露问题,调用者自己处理.
在可能会会发生异常的方法上添加代码:
throws 异常类型
例如:public static void main(String[] args) throws Exception{ }

4.throw和throws的区别

1).throw是语句抛出一个异常
语法:throw 异常对象
throw e;
2).throws是方法可能抛出异常的声明(用在声明方法时,表示该方法可能要抛出异常)
语法:(修饰符)(方法名)([参数列表])[throws(异常类)]{…}
public void doA(int a) throws Exception1,Exception3{…}
(1)、throws出现在方法函数头;而throw出现在函数体。
(2)、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
(3)、两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

5.什么情况下不会执行finally代码块

1). 虚拟机被终止 System.exit().
System.exit(0)的作用是中止当前正在运行的 Java 虚拟机。如果虚拟机被中止,程序也会被终止,所以在它后面的代码都不会被执行,即便是 finally 代码块也同样不会执行。
2).try 代码块无限循环.
这是由于业务逻辑的原因,一直在执行 try 代码块的业务并且永远无法终止,try 代码块都没执行完,自然无法执行 finally 代码块。
3).在被中止的守护线程内.
Java 中的线程可以分为守护线程和用户线程。当程序中所有的用户线程都终止时,虚拟机会 kill 所有的守护线程来终止程序。
当 try-finally 代码块存在于守护线程,而此守护线程因用户线程被销毁而终止时,该守护线程不会继续执行。
假设用户线程(main线程)执行完毕后,作为守护线程的 thread 对象中的 try 代码块还没有执行结束,当用户线程执行结束后,此时已不存在用户线程,虚拟机会强制中止守护线程 thread,导致 finally 代码块不会被执行。

private static void demo() {
Thread thread = new Thread(() -> {
try {
System.out.println("执行 try 代码块,等待2s,等待主线程执行结束...");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("开始执行 finally 代码块");
}
});
thread.setDaemon(true);
thread.start();
}
//控制台输出结果:执行 try 代码块,等待2s,等待主线程执行结束...

6.常见的启动异常
1).NullPointerException
空指针异常:1.字符串变量未初始化;2.接口类型的对象没有用具体的类初始化,比如:List it;会报错|List it = new ArrayList(),则不会报错了;3.当一个对象的值为空时,你没有判断为空的情况。
2).ArrayIndexOutOfBoundsException
数组索引越界异常:数组使用了非法的下标访问,比如说下标为负数或者大于或者等于数组的长度。
3).ArithmeticException
算数运算异常:出现异常的运算条件时,抛出此异常。
4).ClassCastException
类型转换异常:JVM在检测到两个类型间转换不兼容时引发的运行时异常。
5).NumberFormatException
数字格式异常.
6).SystemException
7).ArrayStoreException
8).EmptyStackException
9).BufferOverflowException

以上是关于java基础面试题整理2-异常的主要内容,如果未能解决你的问题,请参考以下文章

java异常,这么基础的面试题要不要更新呢?

java基础面试题整理6-API

2019最新整理JAVA面试题附答案

关于java基础面试题(小编自行整理)

java基础面试题整理5-反射

java异常,这么基础的面试题要不要更新呢?