response.end后抛了异常_(七)异常处理

b6b36b1fc1332d3797bcf3102ad25f58.png

(七)异常处理

异常

异常的体系结构

java.lang.Throwable|-----java.lang.Error:一般不便携针对性的代码进行处理|-----java.lang.Exception:可以进行异常的处理|-----编译时异常(checked|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|-----运行时异常(unchecked,RuntimeException)|-----NullPointerException|-----ArrayIndexOutOfBoundsException|-----ClassCastException|-----NumberFormatException|-----InputMismatchException|-----ArithmeticException

97d3afaeff50eb70e929082731f9def8.png
异常体系结构

从程序执行过程,看编译时异常和运行时异常

66247662c8f125d1422f3440785bcd32.png
  • 编译时异常:执行javac.exe命名时,可能出现的异常
  • 运行时异常:执行java.exe时,可能出现的异常

常见的异常类型,请举例说明

//************************以下是运行时异常****************************//ArithmeticException@Testpublic void test6(){int a =1;int b = 0;System.out.println(a/b);}//InputMismatchException@Testpublic void test5(){Scanner scanner = new Scanner(System.in);int score = scanner.nextInt();System.out.println(score);scanner.close();}//NumberFormatException@Testpublic void test4(){String str = "123";str = "abc";int num = Integer.parseInt(str);}//ClassCastException@Testpublic void test3(){Object obj  = new Date();String str = (String)obj;}//IndexOutOfBoundsException@Testpublic void test2(){//ArrayIndexOutOfBoundsException
//      int[] arr = new int[10];
//      System.out.println(arr[10]);String str = "abc";System.out.println(str.charAt(3));}//NullPointerException@Testpublic void test1(){//int[] arr = null;//System.out.println(arr[3]);String str = "abc";str = null;System.out.println(str.charAt(0));}
//************************以下是运行时异常****************************
//@Test
/*public void test7(){File file = new File("hello.txt");FileInputStream fis = new FileInputStream(file);int data = fis.read();while(data!=-1){System.out.println((char)data);data = fis.read();}fis.close();*///}

异常的处理

java异常处理的抓抛模型

  • 过程一:”抛“:程序再正常执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常的对象。并将此对象抛出,其后的代码就不再执行
  • 关于异常对象的产生:1、系统自动生成的异常对象; 2、手动的生成一个异常对象,并抛出(throw
  • 过程二:“抓”:可以理解为异常处理方式1.try catch finally 2.throws

异常处理方式一:try-catch-finally

  • 使用说明
try{//可能出现异常的代码
}catch(异常类型1 变量名1){//处理异常的方式1
}catch(异常类型2 变量名2){//处理异常的方式2
}catch(异常类型3 变量名3){//处理异常的方式3
}
....
finally{//一定会执行的代码
}/*说明:
1.finally是可以择不一定要选的
2.使用try将可能穿异常的代码报文起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
3.一旦try中的异常对象匹配到某个catch时,就进入catch进行异常处理,一旦处理完成,就跳出当前的try-catch结构(没写finally结构,继续执行其后的代码
4、catch中的异常类型若没子父类关系,则谁声明在上,谁声明在下没关系,若满足子父类关系,则要求子类一定要声明在父类的上面。否则报错
5、常用的异常对象处理方式:1.String getMessage()  2.printStackTrace()
6.在try结构中声明的变量,在出了try结构以后,就不能再被调用
7.try-catch-finally的结构可以嵌套
*/
  • 如何看待代码中的编译时异常和运行时异常?
体会1:使用try-catch-finally处理编译异常时,使得程序编译时不再报错,但是运行时仍可能报错,相当于我们使用try-catch-finally将一个编译时可能出现的错误,延迟到运行时出现 体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally了。针对于编译时异常,我们说一定要考虑异常的处理。
  • finally的再说明
finally是可有可无的 finally声明的是一定会被执行的代码。即使catch中又出现了异常了,try中return语句,catch中return语句等情况 想数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动回收的,我们需要自己手动释放,此时的资源释放,就需要声明在finally中。
  • 面试题

final、finally、finalize三者的区别?

类似的: throw throws Collection Collections String StringBuffer StringBuilder ArrayList LinkedList HashMap LinkedHashMap 重写和重载
  • 结构不相似的: 抽象类 接口 ==、equals() sleep()、wait()

异常处理方式二

"throws+异常类型“写在方法的声明处。指明此方法执行时,可能回抛出的异常类型。 一旦方法体执行时,出现异常,仍会在异常代码出生成一个异常对象,此对象满足throws 后异常类型时,就会被抛出。异常代码后续的代码,就不会被执行

对比两种处理方式

try-catch-finally:真正的将异常处理掉了 throws只是将异常抛给了方法的调用者。并没真正的将异常处理掉

体会开发中应该如何选择两种处理方式?

如果父类中被重写的方法没throws方式处理异常,则子类重写的方法也不能够使用throws,意味着如果子类重写的方法中异常,必须使用try-catch-finally的方式去处理 执行的方法中,先后又调用了另外几个方法,这几个方法是递进关系执行的,我们建议这几个方法使用throws方法进行处理。而执行的方法a可以考虑使用try-catch-finally进行处理。

方法重写的规则之一: 子类重写的方法抛出异常类型不大于父类重写的方法抛出的异常

手动抛出异常对象

使用说明

  • 在程序执行中,除了自动抛出异常对象的情况外,我们还需要手动的throw一个异常类的对象

面试题

throw和throws的区别: throw 标识抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。 throws 属于异常处理的一种方式,声明在方法的声明处。

典型例题

class Student{int id;public void regist(int id) throws Exception {if (id>0){this.id = id;}else{//手动抛出一个异常对象//throw new RuntimeException("您输入的数据非法!");//throw new Exception("您输入的数据非法!");throw new MyException("不能输入负数");}}@Overridepublic String toString() {return "Student{" +"id=" + id +'}';}
}

自定义异常类

如何自定义一个异常类?

/*1.继承于现的异常结构:RuntimeException、Exception
2.提供serialVersionUID
3.提供重载构造器*/
public class MyException extends RuntimeException{static final long serialVersionUID = -7034897190745766939L;public MyException(){}public MyException(String msg){super(msg);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI+视频分析:实时监测无处不在的安全风险

来源丨Forbes作者丨Louis Columbus编译丨科技行者纵观2020年运营层面的诸多挑战,公共事业企业已经意识到对其所运营的物理及网络安全体系进行360度全方位审视的重要意义。最近,由Gartner发布的调查报告显示,94%的北美CIO认为,对偏…

python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...

为什么需要加星标?由于微信公众号出现了 “乱序” 排列的状况,也就是说:文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间,收到我的干货。因此希望您抽出一分钟,完成如下三步。数据分析与统计学之美原创…

台积电2nm工艺重大突破!

来源:万物智能视界根据最新报道,台积电已经在2nm工艺上取得一项重大的内部突破,虽未披露细节,但是据此乐观预计,2nm工艺有望在2023年下半年进行风险性试产,2024年就能步入量产阶段。台积电还表示&#xff0…

png文件合并_png格式图片和jpg格式图片有什么区别?

两个格式的图片群文件有一定的相似之处,png是无损压缩,可以在PS中重新编辑。.jpg格式是一种压缩的图片文件,不能再次编辑,而且在解析度上也是不如.png格式。具体介绍如下:1、png是无损压缩,png即可移植网络…

python环境变量的配置_python基础教程-第一讲-带你进入python的世界

python是一门非常流行的语言,在前段时间网上流传的地产大佬潘石屹宣布要开始学习Python编程,这着实让python又火了一把,但确实反映出python的火热程度 。在2019年12月的世界编程语言排行榜中,python排名第三。2019年12月语言排行榜…

java单终端登陆_配置终端服务单一登录

配置终端服务单一登录配置终端服务单一登录单一登录是一种身份验证方法,允许具有域帐户的用户使用密码或智能卡登录一次,然后,不再要求其提供凭据即可访问远程服务器。若要在终端服务中实现单一登录功能,请确保满足下列要求&#…

Mybatis逆向工程的pojo实现序列化接口代码

情景如下,这两天在做一个分布式的项目,使用了Alibaba的dubbo作为通信工具,zookeeper作为register,由于dubbo是基于socket协议的,所以在进行pojo传输的时候报了异常,因为pojo没有实现序列化接口,…

重磅!2020年全球高被引科学家名单出炉!

来源:科睿唯安、青塔英国伦敦时间11月18日,科睿唯安公布了2020年度“高被引科学家”名单。入榜这份备受期待的名单的自然科学家和社会科学家均发表了多篇高被引论文, 其被引频次位于同学科前1%,彰显了他们在同行之中的重要学术影响…

机器学习—K近邻

一、算法原理 还是图片格式~ 二、sklearn实现 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import seaborn as sns mpl.rcParams[font.sans-serif] [uSimHei] mpl.rcParams[axes.unicode_minus] False from sklearn.d…

华人教授世界一流大学观察报告:斯坦福师生吃饭时,谈论的都是什么话题?...

石毓智,斯坦福大学博士、湖南师范大学特聘教授、新加坡国立大学终身教职。来源:墨香学术 微信:moxiangxueshu编辑 ∑Gemini只有短短120年历史的斯坦福大学,已有近30人获得诺奖,不要说世界上其他大学难以匹敌&#xff0…

tcp连接工具_基于Swoole如何搭建TCP服务,你掌握了吗?

本节将会讲解以下3个问题:通过Swoole如何搭建TCP服务?通过Swoole如何搭建TCP客户端?通过Swoole搭建的TCP服务,更深入理解Swoole的事件驱动模式通过Swoole可以快速创建一个TCP服务,新建一个文件命名为 tcp_server.php&a…

当物联网实时工作时,城市才是“智能”的

文章原载于:千家网在智能交通、数据驱动的公共安全以及平台相关和数字孪生用例相关项目强劲增长的推动下,到2025年,全球在智慧城市倡议上的支出预计将达到3270亿美元。运营转型的前景令人振奋。如果城市正确地构建了这一点,它们将…

复制给节点的命令_深入理解redis主从复制原理

1.复制过程从节点执行 slaveof 命令。 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制。 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点。 连接建立成功后,发送 ping 命令,…

php封装webservice_四种php中webservice实现的简单架构方法及实例

一:PHP本身的SOAP所有的webservice都包括服务端(server)和客户端(client)。要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code首先这是服务端实现:class test{function show(){return the data you request!;}}function getUserInfo($…

量子计算和量子模拟研究获进展

来源:中国科学技术大学北京时间11月19日,中国科学技术大学潘建伟、苑震生等与德国海德堡大学、意大利特伦托(Trento)大学的合作者在超冷原子量子计算和模拟研究中取得重要突破:他们开发了一种专用的量子计算机——71个…

05设计模式——抽象工厂模式

前言:以下总结来自龙哥---左潇龙博客。 总结的很到位,附上博客链接:http://www.cnblogs.com/zuoxiaolong/p/pattern6.html 抽象工厂模式算是工厂相关模式的终极形态,它与工厂方法唯一的区别就是工厂的接口里是一系列创造抽象产品的…

卫星发现,这里用十年逆转了千年!

以下内容影像、地形以及气象数据都来自卫星观测记录我们与这个星球如何共处并解决自身的发展问题这是我们的星球这也是我们的星球地球表面的气体流动被卫星和超级计算机所感知它们带来降雨或干旱富饶或贫瘠改变着一块又一块土地一群又一群人一个又一个时代亚洲大陆西南从印度洋…

张亚勤:新范式、新架构和新模态突破传统算力,推动物理世界走向数字化

本文转自联想创投近日,在联想创投2020 CEO年会上,清华大学讲席教授、智能产业研究院院长、美国艺术与科学院院士、百度前总裁张亚勤先生带来了《未来科技趋势展望》。张亚勤表示,数字化的3.0时期已经到来,数字化的范围已从内容、社…

【华为出品】智能体白皮书2020(附全文下载)

来源 | 华为、IDC、中国信通院等微信编辑 | 邱峰、罗兵微信审核 | 张祥、吴斌、数字理政究院、中通协大数据分会IDC、中国信息化百人会、中国信息通信研究院、中国人工智能产业发展联盟与华为联合编撰的《智能体白皮书》指出,在第四次工业革命爆发前的历史拐点&…

吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换...

该笔记介绍的是《卷积神经网络》系列第四周:特殊应用(2)神经风格转换 主要内容有: 1.神经风格转换 2.卷积网络隐藏单元可视化显示 3.神经风格转换代价函数 4.内容代价函数 5.风格代价函数 *6.数据从一维到三维的推广 神经风格转换 把C(conten…