首页 > 编程语言 >面试官:说说你对Java异常的理解

面试官:说说你对Java异常的理解

时间:2023-04-28 10:32:09浏览次数:37  
标签:面试官 Java 自定义 处理 程序 理解 Throwable 异常


关注“Java后端技术全栈”

回复“000”获取大量电子书

背景

不管是工作中还是面试中,异常这一块还是非常重要的。作为Java开发人员来说,学会如何处理异常,哪些异常必须自己处理,哪些异常可以往外抛等等,这些都是必需品。

生活总有你意想不到的惊喜和意外,我们的code也是一样。

面试官:说说你对Java异常的理解_linux

异常不懂,佛祖也保佑不了你。

今天我们就来聊聊Java异常的话题。我们可以把Throwable当做Java异常的根类(祖宗)。因为实现类太多,所以下面大致列了几个常见的实现类。

面试官:说说你对Java异常的理解_jvm_02

Error

错误:表示系统级的错误和程序不必处理的异常,是 Java 运行环境中的内部错误或者硬件问题。

例如:内存资源不足等。

对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由 Java 虚拟机抛出的。

Exception

异常:表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。

Exception 又分为运行时异常,受检查异常。

RuntimeException(运行时异常)

表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止逻辑,因此,编译器不检查这些异常。

CheckedException(受检查异常)

是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理),所以称之为受检查异常。

Checked异常的处理方式有两种:

  1. 当前方法明确知道如何处理该异常,程序应该使用try--catch 代码块来捕获异常,然后在对应的catch模块中修复异常。
  2. 当前方法不知道如何处理这种异常,应该定义该方法时就声明跑出该异常。

面试官:说说你对Java异常的理解_linux_03

Throwable 类常用方法?

  • getMessage()方法:返回异常发生时的详细信息。
  • getCause()方法:获得导致当前 Throwable 异常的 Throwable 异常。
  • getStackTrace() 方法:获得 Throwable对象封装的异常信息。
  • printStackTrace()方法:在控制台上打印。

请列出 5 个运行时常见异常?

  1. NullPointerException
  2. IndexOutOfBoundsException
  3. ClassCastException
  4. ArrayStoreException
  5. BufferOverflowException

异常处理有哪些关键字?

抛出异常:throw,throws

捕获异常:try,catch,finally

面试官:说说你对Java异常的理解_linux_04

throw 与 throws 的区别 ?

  • throw ,用于在程序中显式地抛出一个异常实例。
  • throws ,用于指出在该方法中没有处理的异常。每个方法必须显式指明哪些异常没有处理,以便该方法的调用者可以预防可能发生的异常。最后,多个异常用逗号分隔。

异常处理中 finally 语句块的重要性?

不管程序是否发生了异常, finally 语句块都会被执行,甚至当没有catch 声明但抛出了一个异常时, finally 语句块也会被执行。

finally 语句块通常用于释放资源,如 I/O 缓冲区、数据库连接、释放锁等等。

异常使用方式

面试官:说说你对Java异常的理解_java_05

异常处理规则

面试官:说说你对Java异常的理解_jvm_06

如何自定义异常?

除了JDK定义好的异常类以外,在开发过程中我们也可以根据业务的异常情况自定义异常类。

用户自定义异常都应该继承Exception基类,如果用户想自定义Runtime异常,则应该继承RuntimeException基类。

定义异常时,通常有两个构造方法:

  • 无参构造方法
  • 有参构造方法,这个参数是字符串,这个字符串作为对该异常信息描述,也就是getMessage()方法的返回值(比如说:“用户密码有误”、“xx接口返回参数为空”等)。

不过在项目中可能没这么简单,可能还会对其进行再次封装。

但是基本上都是有两个参数:code+msg;

code:主要是对业务中的异常进行归类,结合Http的code来定义。

msg:主要是业务异常的信息提示。

面试官:说说你对Java异常的理解_编程语言_07

你们项目中的自定义异常类是如何封装的呢?不知道的就回去翻翻你们项目中的自定义是如何写的,这就把学习和实践结合起来了。

总结

本文一共讲述了下面五个点:

  • Java中异常的分类
  • 常见异常有哪些
  • 相关的关键字如何使用
  • 异常的处理规则
  • 如何自定义异常

get到了么?

面试官:说说你对Java异常的理解_jvm_08

标签:面试官,Java,自定义,处理,程序,理解,Throwable,异常
From: https://blog.51cto.com/u_11702014/6233426

相关文章

  • 面试官:什么是内部类?|这么回答就妥妥的
    关注“Java后端技术全栈”回复“000”获取大量电子书本文内容什么是内部类?我们将一个类A定义在另外一个类B中,那么这个类A就叫内部类。为什么需要内部类呢?有三点原因:内部类方法可以访问该类定义的所在的作用域中的数据,包括私有的数据。内部类可以对同一个包中的其他类隐藏起来。当想......
  • 面试官:说说你对序列化的理解
    关注“Java后端技术全栈”回复“000”获取大量电子书本文主要内容背景在Java语言中,程序运行的时候,会产生很多对象,而对象信息也只是在程序运行的时候才在内存中保持其状态,一旦程序停止,内存释放,对象也就不存在了。怎么能让对象永久的保存下来呢?--------对象序列化。何为序列化和反序......
  • (五) Java变量与数据类型
    目录Java变量Java数据类型基本数据类型整数类型浮点(小数)类型字符型整型细节引用类型Java变量需要先声明,再赋值inta;intb=10;Java数据类型Java数据类型分为两大类:基本数据类型,引用类型基本数据类型基本数据类型有8种,其中6种数值型[byte,short,int,long......
  • 基于Java开发的数字知识库,支持全文检索、知识图谱和工作流审批,太强大了
    一、项目介绍一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,应用在需要进行常用文档整理、分类、归集、检索的地方,适合知识密集型单位/历史文档丰富的单位,或者大型企业、集团。为什么建立知识库平台?二、项目所用技术springboot+vue+tinyMce+activiti+elastics......
  • 【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介策略模式(StrategyPattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。当你想使用对象中各种不同的算法变体,使用if...else所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅在执行某些行为时......
  • 关于开环传递函数的理解
    困惑许久,直到在知乎上看见回答:https://www.zhihu.com/question/450172398 我以前一直以为开环传函是指把反馈回路断开,输出和输入的比值,但后来才知道是指将中间的环路任意位置断开,环路本身的传递函数,也就是说上图中的开环传函不是A(s),而是A(s)B(s)在此记录,以防遗忘 ......
  • JAVA面向对象程序设计_PTA题目集04-06总结分析
    前言:JAVA_BLOG_PTA题目集4-6_总结分析 题目集四:知识点:大体如预备知识,即:通过查询JavaAPI文档,了解Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解Chro......
  • js javascript js隐藏页面上有id的控件,隐藏页面上无控件包含的文字,控制页面控件属性
    1.隐藏页面上有id的控件varinput=document.getElementsByTagName("input");//获取页面所有inputfor(vari=0;i<input.length;i++){if(input.item(i).id.indexOf("txt")>=0)//判断input的id中是否包含txt字符串{......
  • java方法的内存及练习
    方法的内存一、方法调用的基本内存原理:Java内存分配栈:方法运行时使用的内存方法进栈运行,运行完毕就出栈堆:newl出来的,都在堆内存中开辟了一个小空间方法区:存储可以运行的class文件本地方法栈:JVM在使用操作系统功能的时候使用和我们开发无关寄存器:给CPU使用和......
  • Java-Day-16( 常用类 )
    Java-Day-16常用类包装类(Wrapper)针对八种基本数据类型定义相应的引用类型——包装类,有了类的特点,就可以调用类中的方法基本数据类型包装类booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdouble......