当前位置: 首页 > article >正文

Java基础面试题(8)

106.请说一下递归的概念(*)?

        递归是计算机的重要概念,就是在过程或函数里调用自身,以达到能使程序更加简洁、清晰。

107.什么是异常处理机制(*)?

        异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

108.异常对象的生成的两种方式(*)?

        由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出。

        由开发人员手动创建:Exception exception = new ClassCastException();——创建 好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样。

109.异常的抛出机制(*)?

        如果一个方法内抛出异常,该异常对象会被抛给调用者方法中处理

        如果异常没有在调用者方法中处理,它继续被抛给这个调用方法的上层方法。这个过程将一直继续下去,直到异常被处理。

        这一过程称为捕获(catch)异常。 如果一个异常回到 main()方法,并且 main()也不处理,则程序运行终止。

110.异常体系结构?

        Java 标准库内建了一些通用的异常,这些类以 Throwable 为顶层父类。 Throwable 又派生出 Error 类Exception 类

        错误:Error 类以及它的子类的实例,代表了 JVM 本身的错误。错误不能被程序员通过代码处理,Error 很少出现。因此,程序员应该关注 Exception 为父类的分支下的各种异常类。

        异常:Exception 以及它的子类,代表程序运行时发生的各种不期望发生的事件。可以被 Java 异常处理机制使用,是异常处理的核心。

111.Error 和 Exception 的区别(***)?

        Error 和 Exception 都有一个共同的根类是 Throwable 类。

        Error 是系统中的错误,程序员是不能改变的和处理的,一般是指与虚拟机相关的问题, 对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误, 建议让程序终止。因此我们编写程序时不需要关心这类错误。

        Exception,也就是我们经常见到的一些异常情况,表示程序可以处理的异常,可以捕 获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止 异常。

112.Java 异常的分类(*)?

        Java 的异常从广义上分为检查异常(checked exceptions)非检查的异常(unchecked exceptions)

        检查异常: 编译器要求你必须处置的异常。也就是说,你代码还没运行呢,编译器 就会检查你的代码,会不会出现异常,要求你对可能出现的异常必须做出相应的处理。

        非检查异常:编译器不要求强制处置的异常,虽然你有可能出现错误,但是编译器不会在编译的时候检查。

Java 的异常从狭义上分为运行时异常编译期异常

        运行时异常:是 RuntimeException 类及其子类异常,这些异常是非检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该 从逻辑角度尽可能避免这类异常的发生。

        编译期异常:是 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

        检查异常 = 编译期异常;非检查异常 = 运行时异常 + Error;

113.常见的异常有哪些?

java.lang.RuntimeException: 运行时异常

        ClassCastException: 类类型转换异常,当试图将对象强制转换为不是实例的子类时, 抛出该异常;

        ArrayIndexOutOfBoundsException: 数组下标越界异常,当你使用不合法的索引访问数 组时会抛出该异常;

        NullPointerException: 空指针异常,通过 null 进行方法和属性调用会抛出该异常;

        ArithmeticException: 算术运算异常,除数为 0,抛出该异常;

        NumberFormatException: 数字转换异常,当试图将一个 String 转换为指定的数字类 型,而该字符串确不满足数字类型要求的格式时,抛出该异常;

        InputMismatchException: 输入不匹配异常,输入的值数据类型与设置的值数据类型不 能匹配。

java 编译时异常:

        SQLException: SQL 异常,提供有关数据库访问错误或其他错误的信息的异常;

        IOExeption: 输入输出异常,表示发送了某种 I/O 异常的信号。

        FileNotFoundException: 文件找不到异常,通常是两种情况:1、系统找不到指定的路 径 2、拒绝访问(指定的是目录时,就会报拒绝访问异常)

        EOFException: 文件已结束异常,抛出 EOFException 一定是因为连接断了还在继续 read;

java.lang.ClassNotFoundException: 类找不到异常

        当我们通过配置文件去查找一个 类的时候,如果配置路径写错,就会抛出该异常,比如:web.xml 文件中根本就不存在该类 的配置或者配置的路径写错;(比较常见)

114.try...catch...finally 的作用(***)?

        try 块中放可能发生异常的代码。

        catch 块用于捕获并处理一个特定的异常,catch 块可以有多个;

        finally 块无论异常是否发生,异常是否匹配被处理,都会执行,主要做一些清理工作, 比如释放资源; try 必须有,catch 和 finally 都是可选的;但是 try 不能单独存在,至少要和 catch 或 finally 其中一个结合使用;

115.try...catch...finally 和 throws 处理异常的区别(*)?

         try...catch...finally 是在方法内部处理异常,通过统一的异常处理方案;

        throws 是方法本身不知道如何处理这样的异常,或者说让调用者处理更好,调用者需要 为可能发生的异常负责。

116.throws 和 throw 的区别(***)?

        throws 定义在方法的声明中,表示调用该方法可能出现一个或多个异常,由该方法的调用者来处理;throws 后面跟的是一个或多个异常类型,让它的使用者知道需要捕获的异常的类型; throws 表示出现异常的一种可能性,并不一定会发生这种异常。

        throw 定义在方法内部,表示方法体内,表示抛出异常,由方法体内的语句处理;throw 是 具体向外抛出异常的动作,该语句的后面必须是一个异常对象; 执行 throw 一定抛出了某种异常。

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

117.什么是异常链化(*)?

        异常的链化可以将多个模块的异常串联起来,使得异常信息不会丢失。实现方式:以一个异常对象为参数构造新的异常对象。

118.finally 和 return 代码阅读面试题(***)  规则?

        在 try 块中即便有 return,break,continue 等改变执行流的语句,finally 也会执行。

        finally 中的 return 会覆盖 try 或者 catch 中的返回值。

        finally 中的 return 会抑制(消灭)前面 try 或者 catch 块中的异常 finally 中的异常会覆盖(消灭)前面 try 或者 catch 中的异常

119.finally 的使用注意事项(***)?

        不要在 finally 中使用 return。

        不要在 finally 中抛出异常。

        减轻 finally 的任务,不要在 finally 中做一些其它的事情,finally 块仅仅用来释放资源是最合适的。 尽量将所有的 return 写在函数的最后面,而不是 try ... catch ... finally 中。

120.final,finally 和 finalize 的比较(***)?

        final 修饰类,类不能被继承;final 修饰方法,方法不能被重写;final 修饰变量,变 量不能被修改。

        finally 是异常语句块的一部分,无论是否有异常,都会被执行。

        finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此 方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。


http://www.kler.cn/a/273270.html

相关文章:

  • 基于FPGA的可控分频器设计与应用
  • HarmonyOS 移动应用开发
  • 我们来学mysql -- 同时使用 AND 和 OR 查询错误(填坑篇)
  • 【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师
  • C#的Event事件示例小白级剖析
  • Jest进阶知识:React组件的单元测试
  • centos破解root密码以及如何防止他人破解root密码
  • 【设计模式】-工厂模式
  • CLIP解读
  • Java基础-lambda表达式
  • C++_day6:继承、多态
  • arcgis 点连接到面(以地级市图层为例)
  • 【计算机网络】集线器
  • upload-labs-pass01
  • 1.中医学习-总论
  • 使用exe4j将java项目打包为exe文件(包含普通maven项目打jar包)
  • PostgreSQL中vacuum 物理文件truncate发生的条件
  • 牛客题霸-SQL入门篇(刷题记录二)
  • 通过调整报文偏移解决CAN应用报文丢帧或周期过长问题
  • RVA和FOA转换---三
  • 独立维基和验收测试框架 Fitnesse 入门介绍
  • 数据结构与算法Bonus-KNN问题的代码求解过程
  • java15~17 密封类
  • 【JS逆向学习】猿人学第六题 js混淆 回溯
  • 数目之差
  • 【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题