• Java面试题异常相关


    一、java中的异常继承体系及常见运行时异常

    Throwable:类是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。其中异常Exception分为运行时异常(RuntimeException)和编译时异常。

    Error:一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误。

    Exception:分为运行时异常(RuntimeException)和编译时异常。

    Error:一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误。

    Exception异常又分为两种:

    Exception:编译时异常,如果异常不处理,则代码无法编译。

    RuntimeException:运行时异常,运行时发生,无需处理,对代码进行修改解决问题。

    常见的运行时异常:

    1、NullPointerException:空指针异常,调用了未经初始化的对象或者不存在的对象。

    2、ClassNotFoundException:指定的类不存在,这里主要考虑一下类的名称和路径是否正确即可。

    3、ArrayIndexOutOfBoundsException:数组下标越界异常,对数组时操作,调用的下标超过了数组的范围。

    4、NoSuchMethodException:方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。

    5、FileNotFoundException:文件为找打异常,进行IO操作时,发个文的文件不存在。

    二、异常的解决方式

    1、throws:throws来告知调用程序此方法可能会抛出的异常,但是不会处理。调用方法可能会处理这些异常,或者同样用throws来将异常给上一级调用方法。throws关键字后可接多个潜在异常类名。

    2、try-catch:try-catch块捕获处理异常。在try代码块中,包含可能发生异常的代码,一旦发生异常,则抛出异常对象,会进入catch代码块,一个try块之后可以有多个catch子句,try-catch块也能嵌套。每个catch块必须接收一个(且仅有一个)代表异常类型的异常对象参数,若try中抛出的异常和catch接收的异常类型一致,则进入对应的catch代码块。

    3、try-catch可以和finally结合使用,finally代码块肯定会执行。

    三、throw和throws的区别

    throw语句用在方法体内,表示抛出异常对象,由方法体内的语句处理。

    throws语句用在方法声明后面,表示抛出异常,由该方法的调用者来处理。

    throws主要是声明这个给方法会抛出这种类型的异常,使他的调用者知道要捕获这个异常。

    throw是当程序出现某种逻辑错误时主动抛出一个异常实例。

    throw与throws的比较

    1、throw出现在方法函数头;而throw出现在函数体。

    2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。

    3、两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

    throws:

    1. public static void write() throws FileNotFoundException {
    2. FileInputStream fileInputStream=new FileInputStream("c");
    3. }

    throw:

    1. String s = "abc";
    2. if (s.equals("abc")) {
    3. throw new NumberFormatException();
    4. }

    四、常见的异常

    NullPointerException 空指针异常

    ClassNotFoundException 指定类不存在

    NumberFormatException 字符串转换为数字异常

    IndexOutOfBoundsException 数组下标越界异常

    ClassCastException 数据类型转换异常

    FileException 文件未找到异常

    NoSuchMethodException 方法不存在异常

    IOException IO异常

    SocketException Socket异常

    五、try-catch-finally中哪个部分可以省略

    try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同时省略,也就是说有 try 的时候,必须后面跟一个 catch 或者 finally。

    六、try-catch-finally中,如果catch中return了,finally还会执行吗

    finally一定会执行,即使是catch中return了,catch中的return会等finally中的代码执行完之后,才会执行。

    七、final、finally、finalize的区别

    final:修饰符,如果修饰类,此类不能被继承;修饰方法,此方法不能被重写;修饰变量,变量为常量,只能赋值一次。

    finally:是try{} catch{} finally{} 最后一部分,表示不论发生任何情况都会执行,finally部分可以省略,但如果finally部分存在,则一定会执行finally里面的代码。

    finalize:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法

  • 相关阅读:
    java中spark数据集字段下划线改成驼峰
    React Native简介 说明为什么要学习React Native
    CVPR2024|AIGC(图像生成,视频生成等)相关论文汇总(附论文链接/开源代码/解析)【持续更新】
    2023-09-05 LeetCode每日一题(从两个数字数组里生成最小数字)
    如何发现和处理团队中的问题
    基于SSM的零食商店管理系统
    linux循环继续fordodone数值处理和脚本的追踪调试
    单链表在线OJ题二(详解+图解)
    208. 实现 Trie (前缀树)
    用anacnda创建虚拟环境用不用指定python版本
  • 原文地址:https://blog.csdn.net/qq_57167753/article/details/133323802