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());

相关文章
|
2月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
53 4
|
4月前
|
Java API 调度
如何避免 Java 中的 TimeoutException 异常
在Java中,`TimeoutException`通常发生在执行操作超过预设时间时。要避免此异常,可以优化代码逻辑,减少不必要的等待;合理设置超时时间,确保其足够完成正常操作;使用异步处理或线程池管理任务,提高程序响应性。
216 13
|
4月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
141 2
|
2月前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
183 60
|
16天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
78 14
|
19天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
49 13
|
19天前
|
缓存 Java 应用服务中间件
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
66 5
|
2月前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
87 16
|
2月前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
67 9
|
2月前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
72 12

热门文章

最新文章