java异常常见面试题(全)

简介: 目录前言finally在什么时候执行finally一定会被执行吗前言对于异常的详细知识点可看我之前的文章javaSE从入门到精通的二十万字总结(一)以及对异常机制的科普补充java异常处理机制finally在什么时候执行无论出现什么情况,finally代码块的内容都会执行(除非碰到了exit函数才会退出)即使try中有return的语句,finally的return语句都会把try中的return语句覆盖了finally一定会被执行吗答案是不是,有两种情况finally会不执行进行tr

前言

对于异常的详细知识点可看我之前的文章
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());

相关文章
|
21天前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
175 37
|
18天前
|
Java 编译器 数据库连接
Java——异常
在 Java 中,程序执行过程中的不正常行为被称为异常。异常分为 Error 和 Exception。Error 表示系统级错误,而 Exception 则封装程序可能出现的问题。异常包括编译时异常和运行时异常(如数组越界)。异常可用于查找 bug 信息和作为方法内部的特殊返回值。处理异常的方式有默认处理和捕获异常,后者通过 try-catch 结构实现。此外,还可以自定义异常类来更灵活地处理特定情况。
27 9
Java——异常
|
21天前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
21天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
21天前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
21天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
21天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
21天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
下一篇
无影云桌面