Java异常->常见面试题汇总

简介: Java异常->常见面试题汇总

Java异常->常见面试题汇总


1. Java中异常的分类

1>. 父类:Throwable


(1) Throwable:位于 java.lang包中,是所有错误、异常的父类
(2) 常见 方法:
    a.String getMessage():返回字符串类型异常信息,给用户做提示信息
    b.void printStackTrace():打印跟踪方法调用栈而获取的详细异常信
                              息,作用:用于开发人员做程序调试,建
                              议在catch中调用,尽可能不要省略

2>. 子类:Error,是Throwable直接子类,代表错误


 (1) 特点:代表仅靠程序本身无法恢复的严重错误
 (2) 案例:
    内存溢出:java.lang.StackOverflowError(栈溢出)、
            OutOfMemoryError堆溢出
 (3) 处理:一旦遇到 Error,无法靠程序处理(不要试图捕获)          


3>. 子类:Exception,是Throwable直接子类,代表异常


   (1) RuntimeException:运行时异常、未检查异常
       a. 定义:RuntimeException异常及子类或是间接子类统称为运行时异常
       b. 特点:运行时异常在编译过程中编译器不会检测此类异常,运行时报错
       c. 处理:可以处理也可以不处理,可以通过规范代码避免
       d. 案例:常见的运行时异常:
          I.java.lang.ClassCastException:类型转换异常
          II. java.lang.NullPointerException:空指针异常
          III.java.lang.ArrayIndexOutOfBoundsException
                               :数组下标越界
          IV.java.lang.StringIndexOutOfBoundsException:
                                  字符串下标越界
          V. java.lang.IndexOutOfBoundsException:List集合下标越界
          VI. java.lang.NumberFormatException:数字的格式转换异常
   (2) 非RuntimeException:非运行时异常 已检查异常(CheckedException)
       a. 定义:和RuntimeException没有任何继承关系的异常类统称为非运行
               时异常
       b. 特点:编译过程中编译器检测此类异常,在编译过程中报错
       c. 处理:必须处理,如果不处理,无法运行
               注意:编译报错有两种情况:
                    I. 语法出现错误
                    II. 有可出现非运行时异常
       d. 案例: Class.forName("TestStudent"); // 出现非运行时异常


2. 写出 throw 和 throws 的区别。


 throw用于手动产生异常,定义在方法内部
        语法:throw new 异常类名();
 throws用于消极处理异常,定义在方法的声明位置
       修饰符 返回值类型 方法名(形参列表)throws 异常类名{}


3. 写出 final 、finalize、finally的区别

final:修饰符,可以修饰变量、方法、类

final修饰的变量作用范围内常量

final修饰的方法允许继承不允许被覆盖

final修饰的类不能被继承,即没有子类

finalize:方法名,垃圾回收器回收垃圾对象时,jvm自动调用方法

finally:应用积极处理异常try…catch…finally中,必须执行的语句

4. 方法覆盖的要求。


子类的方法名、形参列表、返回值类型和父类相同


子类的方法修饰符和父类相同或是比父类更宽


子类的方法不能抛出比父类更宽的异常


5. 手动写出一个自定异常类MyException.


定义一个类继承Exception或是其子类,如果基于定义的类抛出异常为运行时异常,则需要继承RuntimeException或是其子类


提供两个构造方法:


  (1) 无参数的构造方法
   (2) 带有String类型参数的构造方法,参数代表异常信息,借助
       super(message) 为父类属性massage 赋值
目录
打赏
0
0
0
0
723
分享
相关文章
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
65 4
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
40 15
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
210 60
【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
客户Java日志中出现异常,影响Druid的merge SQL功能(将SQL字面量替换为绑定变量以统计性能),但不影响正常业务流程。原因是Druid在merge SQL时传入null作为dbType,导致无法解析递归查询中的`start`关键字。
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
144 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
66 13
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
java语言后台管理若依框架-登录提示404-接口异常-系统接口404异常如何处理-登录验证码不显示prod-api/captchaImage 404 (Not Found) 如何处理-解决方案优雅草卓伊凡
246 5
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
113 16
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
111 9
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等