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,一经查实,立即删除!

相关文章

java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;

小编典典您的陈述大致相当于这种扩展形式:x x ^ (y y ^ (x x ^ y));与C语言不同,在Java中,保证二进制运算符的左操作数在右操作数之前进行求值。评估如下:x x ^ (y y ^ (x x ^ y))x 1 ^ (y 2 ^ (x 1 ^ 2))x 1 ^ (y 2 ^…

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

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

大数据第一期

一 、大数据的技术体系 有几个部分组成: 六层 数据可视化 (Cboard , Echart) 五层 数据分析(数据仓库(Hive),数据挖掘(SparkStreming),OLAP&…

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

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

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

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

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

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

sql 列集合

STUFF((SELECT ,CAST( TYZ_Bh as varchar(10)) FROM #1 where 片区划分江东 for xml path()),1,1,) 转载于:https://www.cnblogs.com/kunlunmountain/p/8796499.html

java获取s3对象url_java-如何通过SDK设置S3对象的内容类型?

我正在尝试使用AWS Api设置多个对象的内容类型,并向它们添加’content-encoding:gzip’标头.这是我这样做的代码:for (S3ObjectSummary summary : objs.getObjectSummaries() ){String key summary.getKey();if (! key.endsWith(".gz"))conti…

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

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

python 多分类情感词典_基于情感词典的文本情感分类

基于情感词典的文本情感分类传统的基于情感词典的文本情感分类,是对人的记忆和判断思维的最简单的模拟,如上图。我们首先通过学习来记忆一些基本词汇,如否定词语有“不”,积极词语有“喜欢”、“爱”,消极词语有“讨厌…

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

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

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

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

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

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

python 二进制数 转字符串_Python二进制串转换为通用字符串的方法

一个小问题今天在做一个实验时,需要对一个包含中英文词汇的TXT文件进行读入和整理。Python代码的编码规则为UTF-8。在读入时,文件的每行是二进制串,形如:bheroesxff.....在对每行进一步进行处理时,要求处理对象必须为通…

java用户注册代码解析_java springmvc 注册中央调度器代码解析

java springmvc 注册中央调度器代码解析发布时间:2020-08-22 20:58:23来源:脚本之家阅读:107作者:荆棘人这篇文章主要介绍了java springmvc 注册中央调度器代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工…

机器学习—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…

java date the type is ambiguous_一个java ambiguous method 的问题

前段时间读一些代码,其中包含了若干复杂的implemens和extends关系,居然在调用时出现了the method *** is ambiguous for the type *** . 一直以为java中没有多继承,正常的多态怎么会造成这种问题。请看下面的场景:public class Am…

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

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