java异常常见面试题(全)

java异常常见面试题(全),第1张

java异常常见面试题(全)

目录

前言1. Error 和 Exception 的区别2. throw 和 throws 的区别3. final、finally、finalize 有什么区别4. try-catch-finally相关问题5. finally在什么时候执行6. finally一定会被执行吗7. 常见的异常有哪些8.主线程可以捕获到子线程的异常吗

前言

对于异常的详细知识点可看我之前的文章
javaSE从入门到精通的二十万字总结(一)
以及对异常机制的科普补充
java异常处理机制

1. Error 和 Exception 的区别

两者父类都是 Throwable 类

Error 类: 一般是指与虚拟机相关的问题
Exception 类:分为运行时异常和编译时异常

不管是错误还是异常,都是可以抛出的所有错误只要发生,java程序终止程序执行,退出jvm,错误是不能处理的编译时异常:所有Exception的直接子类,都可以叫做是编译时的异常,表示必须在编写程序时候预先对这种异常进行处理,如果不处理编译器会出错。发生概率比较高。也叫受检异常(CheckedException)或者受控异常运行时异常:所有RuntimeException及子类都属于运行时异常,运行时异常可处理也可不处理,发生概率比较低。叫未受检异常(UnCheckedException)或者非受控异常 2. throw 和 throws 的区别

throws :在方法声明后面,表示上报异常信息给调用者throw :在方法体内部,由方法体内部的语句处理,手动抛出异常 3. final、finally、finalize 有什么区别

final是一个关键字。表示最终的。不变的。修饰类、变量、方法。类不能被继承,变量不能被重新赋值,方法不能被重写finally也是一个关键字,和try联合使用,使用在异常处理机制中。不管是否有异常,这个代码块一定会被执行finalize()是Object类中的一个方法。作为方法名出现,finalize是标识符。这个方法是由垃圾回收器GC负责调用的 4. try-catch-finally相关问题

如果catch有return语句,finally还会执行吗?
对基本数据类型,在 finally 块中改变 return 的值没有任何影响,直接覆盖掉;而对引用类型是有影响的,返回的是在 finally 对 前面 return 语句返回对象的修改值。

哪个部分可以省略?
(先科普一下:受检异常是编译器异常,非受检异常是运行时异常)
catch 和finally只能省略其中一个
不管受检还是非受检,finally都是可以省略
受检异常的时候,catch不可以省略,而非受检异常的时候,catch可以省略

5. finally在什么时候执行

无论出现什么情况,finally代码块的内容都会执行(除非碰到了exit函数才会退出)
即使try中有return的语句,finally的return语句都会把try中的return语句覆盖了

6. finally一定会被执行吗

答案是不是,有两种情况finally会不执行
进行try之前如果就有了异常,那么finally就不会执行
如果进入了try之后,遇到了exit,则finally同样不会被执行

7. 常见的异常有哪些

RuntimeException运行时异常:
NullPointerException:空指针异常
ClassCastException:类对象转换异常
IndexOutOfBoundsException:数组越界

SQLException:数据库异常
FileNotFoundException:文件路径异常
IOException:io异常
IllegalArgumentException:参数异常

8.主线程可以捕获到子线程的异常吗

不做特殊处理的话是捕获不到的
通过使用Thread 的静态方法
具体方法如下:
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandle());

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存