关于异常处理的知识整理

article/2025/9/14 0:20:18

目录

1.什么是异常?

2.异常继承结构

3.异常结构继承图

 4.关于异常处理的两种方式:

5.异常对象有两个非常重要的方法


 

1.什么是异常?

程序在执行过程中不正常的情况称为异常,以类和对象的形势存在,可以通过异常类,创建和实例化异常对象。发生异常时JVM会new异常对象。

Java语言是很完善的语言,提供了异常处理机制,当程序在执行过程中出现异常而终止,java会把异常信息打印输出在控制台,以供参考。

存在的意义:增强java程序的健壮性。

2.异常继承结构

父类:java.lang.Throwable

子类:Error(错误类),Excepition(异常类)

Excepition有两个分支:

一个是异常的直接子类,被称为编译时异常,也叫做受检异常,要求程序员在编写程序的时候必须处理,如果不处理,编译器会报错。

另一个分支是RuntimeException(运行时异常),也叫做非受检异常,在编写程序时,程序员可以选择做预处理,也可以不管,不会影响程序的编译阶段。

3.异常结构继承图

 4.关于异常处理的两种方式:

处理异常的第一种方式:
       在方法声明的位置上使用throws关键字抛出,谁调用我这个方法,我就抛给谁。抛给调用者来处理。

       这种处理异常的态度:上报。

处理异常的第二种方式:
       使用try..catch语句对异常进行捕捉。
       这个异常不会上报,自己把这个事儿处理了。
       异常抛到此处为止,不再上抛了。

注意:
    只要异常没有捕捉,采用上报的方式,此方法的后续代码不会执行。
    另外需要注意,try语句块中的某一行出现异常,该行后面的代码不会执行。
    try..catch捕捉异常之后,后续代码可以执行。

在以后的开发中,处理编译时异常,应该上报还是捕捉呢,怎么选?
    如果希望调用者来处理,选择throws上报。
    其它情况使用捕捉的方式。
 

public class ExceptionTest {// 一般不建议在main方法上使用throws,因为这个异常如果真正的发生了,一定会抛给JVM。JVM只有终止。// 异常处理机制的作用就是增强程序的健壮性。怎么能做到,异常发生了也不影响程序的执行。所以// 一般main方法中的异常建议使用try..catch进行捕捉。main就不要继续上抛了。/*public static void main(String[] args) throws FileNotFoundException {System.out.println("main begin");m1();System.out.println("main over");}*/public static void main(String[] args) {// 100 / 0这是算术异常,这个异常是运行时异常,你在编译阶段,可以处理,也可以不处理。编译器不管。//System.out.println(100 / 0); // 不处理编译器也不管// 你处理也可以。/*try {System.out.println(100 / 0);} catch(ArithmeticException e){System.out.println("算术异常了!!!!");}*/System.out.println("main begin");try {// try尝试m1();// 以上代码出现异常,直接进入catch语句块中执行。System.out.println("hello world!");} catch (FileNotFoundException e){ // catch后面的好像一个方法的形参。// 这个分支中可以使用e引用,e引用保存的内存地址是那个new出来异常对象的内存地址。// catch是捕捉异常之后走的分支。// 在catch分支中干什么?处理异常。System.out.println("文件不存在,可能路径错误,也可能该文件被删除了!");System.out.println(e); //java.io.FileNotFoundException: D:\course\01-课\学习方法.txt (系统找不到指定的路径。)}// try..catch把异常抓住之后,这里的代码会继续执行。System.out.println("main over");}private static void m1() throws FileNotFoundException {System.out.println("m1 begin");m2();// 以上代码出异常,这里是无法执行的。System.out.println("m1 over");}// 抛别的不行,抛ClassCastException说明你还是没有对FileNotFoundException进行处理//private static void m2() throws ClassCastException{// 抛FileNotFoundException的父对象IOException,这样是可以的。因为IOException包括FileNotFoundException//private static void m2() throws IOException {// 这样也可以,因为Exception包括所有的异常。//private static void m2() throws Exception{// throws后面也可以写多个异常,可以使用逗号隔开。//private static void m2() throws ClassCastException, FileNotFoundException{private static void m2() throws FileNotFoundException {System.out.println("m2 begin");// 编译器报错原因是:m3()方法声明位置上有:throws FileNotFoundException// 我们在这里调用m3()没有对异常进行预处理,所以编译报错。// m3();m3();// 以上如果出现异常,这里是无法执行的!System.out.println("m2 over");}private static void m3() throws FileNotFoundException {// 调用SUN jdk中某个类的构造方法。// 这个类还没有接触过,后期IO流的时候就知道了。// 我们只是借助这个类学习一下异常处理机制。// 创建一个输入流对象,该流指向一个文件。/*编译报错的原因是什么?第一:这里调用了一个构造方法:FileInputStream(String name)第二:这个构造方法的声明位置上有:throws FileNotFoundException第三:通过类的继承结构看到:FileNotFoundException父类是IOException,IOException的父类是Exception,最终得知,FileNotFoundException是编译时异常。错误原因?编译时异常要求程序员编写程序阶段必须对它进行处理,不处理编译器就报错。*///new FileInputStream("D:\\course\\01-开课\\学习方法.txt");// 我们采用第一种处理方式:在方法声明的位置上使用throws继续上抛。// 一个方法体当中的代码出现异常之后,如果上报的话,此方法结束。new FileInputStream("D:\\course\\01-课\\学习方法.txt");System.out.println("如果以上代码出异常,这里会执行吗??????????????????不会!!!");}
}

5.异常对象有两个非常重要的方法

    获取异常简单的描述信息:
        String msg = exception.getMessage();

    打印异常追踪的堆栈信息:
        exception.printStackTrace(); 

 public static void main(String[] args) {// 这里只是为了测试getMessage()方法和printStackTrace()方法。// 这里只是new了异常对象,但是没有将异常对象抛出。JVM会认为这是一个普通的java对象。NullPointerException e = new NullPointerException("空指针异常fdsafdsafdsafds");// 获取异常简单描述信息:这个信息实际上就是构造方法上面String参数。String msg = e.getMessage(); //空指针异常fdsafdsafdsafdsSystem.out.println(msg);// 打印异常堆栈信息// java后台打印异常堆栈追踪信息的时候,采用了异步线程的方式打印的。e.printStackTrace();for(int i = 0; i < 1000; i++){System.out.println("i = " + i);}System.out.println("Hello World!");}
}


http://chatgpt.dhexx.cn/article/tfRjVaTg.shtml

相关文章

异常处理---

异常 异常处理 例&#xff1a; public class Demo{public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method(){int[] arr{1,2,3};System.out.println(arr[3]);//数组索引…

异常处理

1.相关概念的介绍 1&#xff09;异常情形&#xff1a;是指阻止当前方法或作用域继续执行的问题。 2&#xff09;监控区域&#xff1a;一段可能产生异常的代码&#xff0c;并且后面跟着处理这些异常的代码。 3&#xff09;try块&#xff1a;如果在方法的内部或者在方法内部调…

异常及异常处理

一、异常的概念 定义&#xff1a; 异常指的是运行期出现的错误&#xff0c;也就是当程序开始执行以后执行期出现的错误。 处理态度&#xff1a; 当捕获到异常以后一定要做出处理&#xff0c;哪怕是把这个异常的错误信息打印出来&#xff0c;这是一种良好的编程习惯。 …

异常处理(throw、throws、try-catch)

Java异常处理的五个关键字try、catch、finally、throw、throws 1.抛出异常throw 在编写程序时&#xff0c;我们必须要考虑程序出现问题的情况。比如&#xff0c;在定义方法时&#xff0c;方法需要接收参数。那么&#xff0c;当调用方法使用接收到的参数时&#xff0c;首先需要…

SpringBoot+Axis2搭建WebService服务端

SpringBootAxis2搭建WebService服务端 之前用过Spring Axis2搭建过WebService项目&#xff0c;网上也有很多资料教程&#xff0c;最近需要在一个SpringBoot项目中添加Axis2的服务端&#xff0c;在网上找了很久&#xff0c;没有找到相关教程&#xff0c;最终经过大神朋友的指点…

AXI(2)完结

四、握手 4.1握手过程 所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。 双向握手的机制意味着主机和从机之间传输数据时&#xff0c;都可以控制传输的速率&#xff0c;只有当VALID和READY同时为高电平时&#xff0c;传输才会发生。 发送方&a…

读Axis2用户帮助文档 (axis2中文文档)

作者&#xff1a;李红霞 时间&#xff1a;2006-10-19 声明&#xff1a;本文可以算作Axis2用户手册的翻译&#xff0c;但是翻译后的文本是经过作者理解写出来的&#xff0c;可能有些偏差&#xff0c;欢迎讨论。本文属作者原创&#xff0c;允许转载&#xff0c;但请注明出处。 英…

AXI 3.0 (1)

一、AXI简介 AMBA3.0中新增加了一种总线——AXI&#xff08;Advanced eXtensible Interface&#xff0c;高级扩展接口&#xff09;。 AMBA AXI 协议的目标是高性能、高频的系统设计&#xff0c;其包含了若干特性。 适合高带宽和低延迟的设计 提供高频操作&#xff0c;无需使…

Apache axis2 + Eclipse 开发 WebService

一、简介 Apache Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持&#xff0c;但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写&#xff0c;而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化…

Axis2与Web项目整合

一、说明: 上一篇介绍了通过使用Axis2来发布和调用WebService&#xff0c;但是是把WebService发布在Axis2提供的项目中&#xff0c;如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢&#xff1f; 本篇即介绍在Web项目中使用Axis2来发布WebService. 二、具体…

Axis2中文手册

中文原文 http://tenn.javaeye.com/blog/100736 英文原文 http://ws.apache.org/axis2/1_0/userguide.html 概述 这个说明文档涉及以下内容&#xff1a;  如何使用 axis2 创建 web service 和客户端程序  如何定制一个模块 (Module) 并在 web service 中使用它  Sam…

axis2的使用(转载)

通过axis2发起WS请求时添加SOAP header 首先要获得一个ServiceClient对象&#xff0c;因为这个对象是org.apache.axis2.client.Stub里面定义的&#xff0c;所以你生成的stub里面应该直接就可以使用这个对象&#xff0c;或者调用stub的_getServiceClient()方法来获取这个对象。 …

SpringBoot2 整合 AXIS2 服务端和客户端

文章目录 一、AXIS2服务端1. 版本选型2.导入依赖3. services.xml4.Axis2配置类5.服务接口6.服务接口实现类7. FileCopyUtils工具类8. 测试验证 二、AXIS2服务端2.1. 客户端类2.2. 服务调用测试开源源码. 一、AXIS2服务端 1. 版本选型 阿健/框架版本spring-boot2.5.5axis21.7.…

WebService之Axis2系列教程(一)Axis2的下载、安装和使用

Axis2是目前比较流行的WebService引擎。WebService被应用在很多不同的场景。例如&#xff0c;可以使用WebService来发布服务端 Java类的方法&#xff0c;以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService还经常被使用在SOA中&#x…

Axis2 webservice学习总结

一、学习课件目录&#xff1a; Axis2(WebService)培训资料1 - 百度文库 (baidu.com) WebService大讲堂之Axis2 - 百度文库 (baidu.com) 二、学习总结&#xff1a; Web Service是构建互联网分布式系统的基本部件&#xff0c;它是一个应用程序&#xff0c;它向外界暴露出一个…

小白轻松使用axis2构建webservice

引言&#xff1a; 使用axis2是来实现webservice接口是比较常见的&#xff0c;就我来说&#xff0c;如果要学一个首次接触东西&#xff0c;简单了解相关基础概念后&#xff0c;就希望自己能够简单快速的实现一个例子&#xff0c;在学习一门开发语言的时候&#xff0c;一个hello…

模板引擎 Velocity语法

Velocity是一个基于java的模板引擎&#xff08;template engine&#xff09;&#xff0c;它允许任何人仅仅简单的使用模板语言&#xff08;template language&#xff09;来引用 由java代码定义的对象。作为一个比较完善的模板引擎&#xff0c;Velocity的功能是比较强大的&…

velocity 模板语法

velocity 模板语法 前言1. 访问1.1 变量1.2 属性1.3 方法 2. 指令2.1 #set 创建变量2.2 #if/#elseif/#else 分支控制2.3 #foreach 循环控制2.4 #include - 引入本地文件&#xff0c;文本展示2.5 #parse - 引入本地文件&#xff0c;velocity 解析后展示2.6 #stop - 停止模板解析…

finalize() 原理

finalize 方法的作用是&#xff1a; 如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链&#xff0c;那他将会被第一次标记并且进行一次筛选&#xff0c;筛选的条件是此对象是否有必要执行 finalize 方法。 注意&#xff1a;当对象没有覆盖 finalize 方法&#xf…

finalize()

注&#xff1a;本文的目的并不是鼓励使用finalize方法&#xff0c;而是大致理清其作用、问题以及GC执行finalize的过程。 1. finalize的作用 finalize()是Object的protected方法&#xff0c;子类可以覆盖该方法以实现资源清理工作&#xff0c;GC在回收对象之前调用该方法。fina…