首页 > 其他分享 >知识点总结

知识点总结

时间:2023-10-20 21:12:11浏览次数:37  
标签:总结 知识点 Java 处理 抛出 方法 异常 运行

一、Java异常处理简介

Java异常可以分为三种类型:可检查异常(checked exception)、运行时异常(runtime exception)和错误(error)。以下是它们之间的关系和特点:

1. 可检查异常(checked exception):

- 继承自Exception类,需要在代码中显式处理或声明。

- 代表程序可预见的、并且可以从中恢复的异常情况。

- 异常处理方式:使用try-catch块捕获并处理异常,或在方法签名中使用throws关键字声明抛出异常。

示例代码:

```java

public void readFile() throws IOException {

try (FileReader fr = new FileReader("file.txt")) {

// 读取文件内容

} catch (IOException e) {

// 处理异常

}

}

```

2. 运行时异常(runtime exception):

- 继承自RuntimeException类,不需要在代码中显式处理或声明。

- 代表程序运行时的错误或异常情况,通常是由程序员的错误导致的。

- 异常处理方式:不强制要求捕获和处理,可以选择性地进行处理。

示例代码:

```java

public int divide(int a, int b) {

return a / b; // 若b为0,将抛出ArithmeticException

}

```

3. 错误(error):

- 继承自Error类,通常是由JVM或系统级别的问题导致的,无法通过代码方式处理。

- 代表严重的错误情况,无法恢复。

- 异常处理方式:不捕获或处理,由JVM或系统进行处理。

二、最佳实践方法

良好的异常处理是保证代码可靠性和可维护性的重要因素。以下是一些最佳实践方法,可供参考:

1. 使用合适的异常类型:

- 对于可检查异常,应选择合适的异常类型,并在方法签名中显式声明抛出异常,以便上层调用者可以知晓可能抛出的异常类型。

- 对于运行时异常,应避免滥用,在需要的情况下才使用。

2. 声明精确的异常:

- 在方法签名中声明抛出的异常时,应尽量精确地声明,只抛出必要的异常类型,而不应该使用泛化的异常类型(如Exception)。

- 这样可以提供更明确的异常信息,方便调用者处理或捕获特定的异常。

3. 使用try-with-resources释放资源:

- 在处理可能抛出异常的资源时,推荐使用try-with-resources语句块来自动释放资源。

- 这种方式能够确保在代码执行完毕或出现异常时,资源能够被正确关闭和释放,避免资源泄漏。

示例代码:

```java

try (InputStream is = new FileInputStream("file.txt")) {

// 处理输入流

} catch (IOException e) {

// 异常处理

}

```

4. 记录和处理异常:

- 在捕获异常时,建议记录异常信息(如使用日志框架记录)以便进行故障定位和排查。

- 在处理异常时,可以根据具体情况进行恢复操作、提示用户或进行其他逻辑处理。

示例代码:

```java

try {

// 执行可能抛出异常的代码

} catch (CustomException e) {

logger.error("发生自定义异常:{}", e.getMessage());

// 处理异常情况

} catch (Exception e) {

logger.error("发生未知异常:", e);

// 处理其他异常情况

}

```

5. 避免过度处理和吞掉异常:

- 异常是程序中潜在的问题,过度处理或吞掉异常会隐藏问题和导致难以排查的错误。

- 应该根据具体情况进行适当的处理,避免过度捕获和不必要地吞掉异常。

可查异常:编译器要求必须处理的异常,这类异常的发生在一定程度上是可以预计的,而且这类异常一旦发生,就必须采用某种方式进行处理。除了RuntimeException及其子类以外的其它异常类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,出现这种异常,要么用try-catch语句捕捉它,要么用throws语句声明抛出它,否则编译不通过。

不可查异常:编译器不要求强制处理的异常,包括运行时异常(RuntimeException与其子类)和错误(Error) 。

Exception 异常又可分为两大类:运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。

运行时异常:RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不可查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

运行时异常的特点:Java编译器不会检查它,也就是说,当程序中出现这类异常时,也会编译通过。

非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

捕捉异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。

由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。

对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常。

对于所有的可查异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常。

能够捕捉异常的方法,需要提供相符类型的异常处理器。所捕捉的异常,可能是由于自身语句所引发并抛出的异常,也可能是由某个调用的方法或者Java运行时 系统等抛出的异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。

任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。从方法中抛出的任何异常都必须使用throws子句。捕捉异常通过try-catch语句或者try-catch-finally语句实现。

总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

标签:总结,知识点,Java,处理,抛出,方法,异常,运行
From: https://www.cnblogs.com/zh-ang-zhang/p/17777993.html

相关文章

  • 今日总结
    今天学习了C#编程,以及 WinForm入门课程以及图形界面GUI编程;开始接触这门语言,虽然其与JAVA和CC++有许多不同之处,但通过之前的学习,还是很容易掌握基本的特性的;我计划做一个c/s界面的与数据库交互的信息管理系统,其与以往的b/s方式有着很多不同,但又有着许多共通之处。......
  • 力扣每日一题+python知识点回顾(三)
    力扣题目:根据规则将箱子分类(题号:2525)给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。如果满足以下条件,那么箱子是"Bulky"的:箱子至少有一个维度大于等于10^4。或者箱子的体积大于等于10^9。如果箱子的......
  • 10.20每日总结
      例题展示例题解决......
  • 2023.10.20——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.休息明日计划:学习......
  • RestTemplate 用法总结
    一、RestTemplate是什么?   如果某个服务想获取其他服务的数据的时候,一般会用到RestTemplate,这是一种HTTP请求调用的工具二、如何使用?   通常情况下,服务与服务之间数据的获取并不是一次性的,所以我们把这个RestTemplate注入容器中,这样我们每次使用直接调用即可。@Co......
  • notepad++使用总结
    1.安装插件后,工具栏不显示图标问题安装完插件,工具栏所安装的插件图标没正常显示出来,鼠标放上去,会提示在设置里设置如下后,就可以正常显示......
  • 10.20(异常总结)
    Java项目中常用的异常处理情况包括try-catch语句、throws关键字、自定义异常等。try-catch语句用于捕获和处理异常,可以有多个catch语句,需要注意顺序。throws关键字用于声明方法可能抛出的异常类型。自定义异常需要继承自Exception类或其子类。finally语句在异常处理中非常重要,可以......
  • Tita 升级|总结优化上线
    一、写总结时支持导入他人任务Tita-OKR和新绩效一体化管理平台现在写总结可以导入你可见的任务,如你参与的或下属的任务,更完整的汇报工作范围中支持选择「审批的」的任务二、导入任务按母子层级展示总结中导入的任务如果存在子母关系,则按母子层级展示,汇报更清晰 PS:......
  • 排序算法总结
    lowB三人组冒泡排序思想:列表相邻元素两两对比,每趟结束都会产生一个最大/最小元素代码实现defbubble_sort(li):foriinrange(0,len(li)-1):#趟数exchange=0#设置一个标识符,当有一趟无变化时,列表已有序,停止排序forjinrange(0,len(......
  • 项目开发中遇到的问题总结
    1、echarts图表问题数据库中存储结构为横向一条数据包含体重,身高,血糖血压,添加事件等数据而前端需要纵向以属性为y轴,事件为纵轴,分别产生多张表格。需要前端使用javascript进行遍历,使用到了map方法this.status=response.data.dataconsole.log(this.status)constxData=thi......