java 异常分类和处理机制(总结整理)

Java异常处理需要掌握的知识点:

目录

一、异常的概念

二、异常分类

三、异常处理的机制java异常处理的方式

四、异常处理的原则(这部分还有点疑问,没有找到明确的原则)


一、异常的概念

什么是异常?
        程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。在Java中即,Java在编译或运行或者运行过程中出现的错误。

Java提供了更加优秀的解决办法:异常处理机制。

异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行。也是一种容错机制。
 

二、异常分类

三、异常处理的机制java异常处理的方式

 JVM 是如何处理异常的?
        在一个方法中如果发生异常,这个方法会创建一个异常对象,并转交给 JVM,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并转交给 JVM 的过程称为抛出异常。可能有一系列的方法调用,最终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。

        JVM 会顺着调用栈去查找看是否有可以处理异常的代码,如果有,则调用异常处理代码。当 JVM 发现可以处理异常的代码时,会把发生的异常传递给它。如果 JVM 没有找到可以处理该异常的代码块,JVM 就会将该异常转交给默认的异常处理器(默认处理器为 JVM 的一部分),默认异常处理器打印出异常信息并终止应用程序。

方式一: 捕获异常try-catch-finally
方式二:直接抛出异常throw

通常,应该捕获那些知道如何处理的异常,将不知道如何处理的异常继续传递下去。传递异常可以在方法签名处使用 throws 关键字声明可能会抛出的异常。

private static void readFile(String filePath) throws IOException {
    File file = new File(filePath);
    String result;
    BufferedReader reader = new BufferedReader(new FileReader(file));
    while((result = reader.readLine())!=null) {
        System.out.println(result);
    }
    reader.close();
}

 方式三: 声明异常throws

封装异常再抛出
有时我们会从 catch 中抛出一个异常,目的是为了改变异常的类型。多用于在多系统集成时,当某个子系统故障,异常类型可能有多种,可以用统一的异常类型向外暴露,不需暴露太多内部异常细节。

private static void readFile(String filePath) throws MyException {    
    try {
        // code
    } catch (IOException e) {
        MyException ex = new MyException("read file failed.");
        ex.initCause(e);
        throw ex;
    }
}

四、异常处理的原则(这部分还有点疑问,没有找到明确的原则)

 异常处理的一般原则:

(1)具体明确:

异常类有很多,异常捕获越具体,我们的程序就能更好地回答”什么出了错”这个问题。捕获异常时尽量明确很重要。

  • 1.保持异常的原则性,异常的原子性是指异常发生后,各个对象的状态可以回复到异常发生前的状态,而不会处于某个不合理的中间态

  • 2.避免过大的try代码块,try代码块越大,出现的异常的地方越多,要分析发生一场的地方就越困难,有效的做法是分割各个可能出现异常的程序段落,把它们分别放在单独的try语句中,从而分别捕获异常
    3.在catch语句中声明具体的异常类型,从小到

(2)提早抛出:

        能处理就早处理,抛出还不能处理的就想法消化掉或者转换为RuntimeException处理。因为对于一个应用系统来说,抛出大量异常是有问题 的,应该从程序开发角度尽可能的控制异常发生的可能。

        异常堆栈信息提供了导致异常出现的方法调用链的精确顺序,包括每个方法调用的类名,方法名,代码文件名甚至行数,以此来精确定位异常出现的现场。通过提早抛出异常(又称"迅速失败"),异常得以清晰又准确。

(3)延迟捕获:

        把异常处理的责任往调用链的上游传递的办法,就是在方法的throws子句声明异常。在声明可能抛出的异常时,注意越具体越好。这用于标识出调用你方法的程序需要知晓并且准备处理的异常类型。

(4) 对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,将优雅的异常信息反馈给用户。
 

以上内容参考整理自:

https://thinkwon.blog.csdn.net/article/details/104390689

https://blog.csdn.net/sugar_no1/article/details/88593255

https://blog.csdn.net/weixin_30563851/article/details/114023961

https://blog.csdn.net/weixin_28783097/article/details/114568654

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面试题整理是为了帮助准备面试的候选人更好地了解面试的内容和要求。对于Java2021的面试题整理,可以从各个方面进行组织和分类,以便更好地帮助面试者准备。下面是我对Java2021面试题整理的一些建议。 1.基础知识:面试题可以包括Java语言的基本语法、关键字、数据类型、流程控语句、异常处理等方面的问题。这些问题可以帮助面试者检验自己对Java语言基础知识的掌握程度。 2.面向对象:面试题可以涉及Java面向对象的概念、封装、继承、多态以及接口、抽象类等方面的问题。这些问题可以帮助面试者了解Java面向对象编程的特点和应用。 3.集合框架:面试题可以包括关于Java集合框架的知识,如ArrayList、LinkedList、HashSet、HashMap等的特性、用法和区别。这些问题可以帮助面试者检验自己对Java集合框架的理解和应用能力。 4.多线程:面试题可以涉及Java多线程编程的基本概念、线程的创建与启动、线程同步与互斥、线程池等方面的问题。这些问题可以帮助面试者了解多线程编程的原理和实践。 5.IO流:面试题可以包括关于Java IO流的知识,如输入输出流的分类、字符流和字节流的区别、文件读写操作等方面的问题。这些问题可以帮助面试者检验自己对IO流的理解和应用。 6.异常处理:面试题可以涉及Java异常处理的机、try-catch语句的使用、自定义异常等方面的问题。这些问题可以帮助面试者了解异常处理的原理和常见应用。 7.Java虚拟机:面试题可以包括Java虚拟机(JVM)的基本概念、内存模型、垃圾回收算法等方面的问题。这些问题可以帮助面试者了解JVM的工作原理和性能优化。 8.框架和工具:面试题可以涉及Java常用的开发框架和工具,如Spring、Hibernate、MyBatis、Maven等方面的问题。这些问题可以帮助面试者了解开发框架的应用和工具的使用。 通过对这些方面的面试题整理,可以帮助面试者全面了解Java2021面试的内容和要求,并有针对性地准备和复习相关知识。面试者应该注重理论的学习,同时结合实践经验进行练习,以便在面试时能够更好地展示自己的能力和潜力。同时,面试者还应注意自己的沟通能力、问题分析能力和解决问题的能力,这些都是面试过程中重要的评估指标。 ### 回答2: Java2021面试题整理主要集中在以下几个方面: 1. 基础知识:Java中的基本数据类型、变量和常量、运算符、控语句等内容是面试中常见的考点。面试官会通过这些问题判断候选人对Java基础知识的熟悉程度和掌握能力。 2. 面向对象编程:Java是一门面向对象的编程语言,所以面试中对面向对象的理解和应用也是重要的考点。常见的问题包括类和对象、继承和多态、封装和抽象等。 3. 异常处理:Java中的异常处理是编程中的重要内容,面试中会涉及到异常的概念、异常分类、如何捕获和处理异常、自定义异常等。 4. 集合框架:Java集合框架是Java开发中常用的工具,常见的面试题会涉及到ArrayList、LinkedList、HashMap等集合的特点和应用场景,以及集合的遍历和使用方法。 5. 多线程:Java是一门支持多线程的语言,所以多线程的知识也是面试中的热点考点。常见的问题包括线程的生命周期、线程同步与互斥、线程间的通信、线程池等。 6. JVM相关知识:Java虚拟机(JVM)是Java运行的基础,所以对JVM的了解也是面试中的重要考点。常见问题包括JVM的结构、内存模型、垃圾回收机等。 此外,面试中还可能涉及到数据库、网络编程、设计模式等其他相关知识。因此,面试前需要对Java的相关知识有全面的掌握,并且要能够灵活运用这些知识进行问题的解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值