目录

一、程序中的异常

二、什么是异常

三、程序中的异常处理

四、异常处理

五、常用的异常处理结构

六、try-catch块

七、try-catch-finally

八、多重catch块

九、异常的分类

十、本章总结


一、程序中的异常

丰收时节,星沐生态农场将采摘的水果平均分给每家果商,编程实现计算每家果商可以分到的蔬果重量

/*** ClaName:Test* Description:TODO* date:2022/4/4 9:02** @author Reincarnation* @version 1.0* @since JDK 1.8*/import java.util.Scanner;/*** 计算果商供应量*/
public class Test {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.print("请输入果实采摘量(公斤):");int weight=input.nextInt();System.out.print("请输入果商数(家):");int num=input.nextInt();System.out.println("每家果商供应"+weight/num+"公斤水果。");System.out.println("欢迎再来,预祝生意兴隆!");}
}

接受的果商数值直接影响代码的运行结果

- 正整数:程序正常运行
- 零:程序出现异常

非数字:程序出现异常 

因为疏漏造成程序运行出现异常,应该怎么解决?是否可以让程序自动判断异常和处理异常呢?

代码改造如下,尝试通过if-else语句解决

/*** ClaName:Test2* Description:TODO* date:2022/4/4 9:13** @author Reincarnation* @version 1.0* @since JDK 1.8*/import java.util.Scanner;/*** 计算果商供应量*/
public class Test2 {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.print("请输入果实采摘量(公斤):");int weight=0;if (input.hasNext()){weight=input.nextInt();}else {System.out.println("果实采摘量必须是整数!");System.exit(1);}System.out.print("请输入果商数(家):");int num=0;if (input.hasNext()){num=input.nextInt();System.out.println("果商数必须大于零!");System.exit(1);}else {System.out.println("果商数必须是整数!");System.exit(1);}System.out.println("每家果商供应"+weight/num+"公斤水果。");System.out.println("欢迎再来,预祝生意兴隆!");}
}

使用if else的缺陷

1. 无法穷举所有的异常情况
2. 影响程序可读性,维护难度高

解决方案:使用异常处理机制

二、什么是异常

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

三、程序中的异常处理

Java编程语言使用异常处理机制为程序提供了错误处理的能力

1. Java中,所有的异常都定义为类
2. 除了内置的异常类之外,Java也可以自定义异常类
3. Java的异常处理机制也允许自行抛出异常

四、异常处理

Java的异常处理是通过5个关键字实现的

① try、② catch、 ③finally、④throw、⑤ throws

五、常用的异常处理结构

try {//有可能出现异常的语句
}[catch(异常类型 异常对象) {//异常处理语句
}] [finally {//一定会运行到的语句
}]

六、try-catch块

使用try-catch块捕获异常,分为三种情况

第一种情况(正常)

public static void main(String[] args) {try {// 代码段(此处不会产生异常)} catch (异常类型 ex) {// 对异常进行处理的代码段}// 代码段
}

第二种情况:出现异常

public static void main(String[] args) {try {// 代码段 1// 产生异常的代码段 2// 代码段 3} catch (异常类型 ex) {// 对异常进行处理的代码段4}// 代码段5
}

示例:使用try-catch语句处理接受果商数为0的异常

import java.util.Scanner;/*** 计算果商供应量*/
/*
使用try-catch语句处理异常*/
public class Test3 {public static void main(String[] args) {Scanner input=new Scanner(System.in);try {System.out.print("请输入果实采摘量(公斤):");int weight=input.nextInt();System.out.print("请输入果商数(家):");int num=input.nextInt();System.out.println("每家果商供应"+weight/num+"公斤水果。");System.out.println("欢迎再来,预祝生意兴隆!");}catch (Exception ex){System.out.println("出现错误:采摘量和果商数应为整数,果商数应大于零!");}}
}

运行结果:

 在catch块中处理异常

加入用户自定义处理信息

System.err.println("出现错误:采摘量和果商数应为整数,果商数应大于零! ");

调用方法输出异常信息

e.printStackTrace();

异常对象常用的方法

方法名 说 明  
void printStackTrace() 输出异常的堆栈信息
String getMessage() 返回异常信息描述字符串, 是printStackTrace()输出信息的一部分

printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程

try {//省略代码} catch (Exception ex) {System.err.println("出现错误:采摘量和果商数应为整数,果商数应大于零!");ex.printStackTrace();  //输出完整异常信息}

 第三种情况:异常类型不匹配

public static void main(String[] args) {try {// 代码段 1// 产生异常的代码段 2// 代码段 3} catch (异常类型 ex) {// 对异常进行处理的代码段4}// 代码段5
}

七、try-catch-finally

在try-catch块后加入finally块
是否发生异常都执行

在try-catch块后加入finally块,当存在 return的try-catch-finally块

finally唯一不执行的情况

八、多重catch块

程序中可能存在多种异常类型不同的异常类型有不同的处理方式

引发多种类型的异常

1. 排列catch 语句的顺序:先子类后父类
2. 发生异常时按顺序逐个匹配
3. 只执行第一个与异常类型匹配的catch语句

九、异常的分类

十、本章总结

Java OOP 异常相关推荐

  1. Java OOP 6 异常

    Java OOP 6 异常 文章目录 Java OOP 6 异常 一.学习目标 二.生活中的异常 三.程序中的异常 四.什么是异常 五.程序中的异常处理 六.异常处理 七.常用的异常处理结构 八.tr ...

  2. 在 Java OOP 编程中的注意事项

    在 Java OOP 编程中的注意事项 重写 方法 字段 反射 static 接口 abstract Maven JUnit 重写 方法 当子类重写超类的方法时,子类该方法的被访问权限不能低于超类方法 ...

  3. 初学Java6:Java OOP基础语法总结

    *************** Java OOP 基 础 语 法 总 结 ************************* 1,类与对象1),类(class)是相同属性和方法的一组集合. A,类的组 ...

  4. Java OOP 7 JAVA 集合框架

    Java OOP 第七章 JAVA 集合框架 文章目录 Java OOP 第七章 JAVA 集合框架 一.学习目标 二.数组存在的缺陷 三.Java集合框架 四.Collection接口 五.Coll ...

  5. JavaSE-Adventure(VII) Java OOP 面向对象程序设计

    JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 CONTENTS JavaSE-Adventure(VII) Java & OOP 面向对象程序设计 ...

  6. Java OOP 9 Java I/O

    Java OOP 9 Java I/O 文章目录 Java OOP 9 Java I/O 一.学习目标 二.文件 三.File类 四.IO流 五.Java流的分类 Java流的分类 按流向划分:输入流 ...

  7. Java OOP 第三章 多态

    Java OOP 多态 文章目录 Java OOP 多态 一.学习目标 二.多态 1.为什么使用多态 2.什么是多态? 3.如何实现多态? 三.向上转型 四.父类作为形参 扩展种植梨树 五.多态的使用 ...

  8. JAVA -- OOP -- 接口

    JAVA -- OOP -- 接口 1.概念 2.格式 3.接口的特点 4.接口的定义及实现 5.接口的用法 6.接口的多继承和多实现 7.类.接口 之间的关系 8.抽象类与接口的区别 1.概念 接口 ...

  9. Java OOP 8 实用类(枚举、包装类、日期类、Random类)

    Java OOP 8 实用类 文章目录 Java OOP 8 实用类 一.学习目标 二.Java API 三.枚举 3.1为什么使用枚举? 3.2什么是枚举? 3.3如何使用枚举? 3.4常见错误 四 ...

最新文章

  1. 再发力!Facebook AI何恺明等最新研究MoCo(动量对比学习)第二版,超越Hinton的SimCLR,刷新SOTA准确率...
  2. T-Mobile旗下网站又曝安全漏洞 允许任何人查看他人账户信息
  3. 点击图片显示大图(有多张图片可以左右滑动)
  4. 国产主可控的嵌入式仿真测试软件SkyEye与可信编译器L2C的核心翻译介绍
  5. 硬币找零问题,动态规划基础,百度面试题
  6. 百度SEO未注册域名批量检测查询
  7. 关于表数据行统计的问题和相关误区
  8. CCF201803-3 URL映射(100分)【文本处理+暴力】
  9. SQL建表语句转换为Excel表格
  10. DWM 层 -- 访客 UV 计算
  11. postgresql源码学习(38)—— 备份还原② - do_pg_stop_backup函数
  12. [Irving] Wpf DevexPress GridControl 获取选中行
  13. NISP管理中心|NISP二级证书介绍
  14. SSTV慢速扫描的几种模式优劣对比
  15. 从NFA到DFA的转换
  16. Chrome 清除特定网站的 cookie
  17. pos机属于计算机系统吗,pos机与计算机有什么区别
  18. 【渝粤题库】广东开放大学 文化服务营销管理 形成性考核 (2)
  19. 计量大学计算机学院,计算机科学与技术
  20. NameNode Last Checkpoint报错误[Checkpoint Critical]

热门文章

  1. 将日数据转为周数据:to_period, resample
  2. iOS no summary
  3. verilog中tb仿真文件模板
  4. directives(Directives UE 93 42 CEE)
  5. 电磁原理---电磁炉
  6. 数据结构JAVA实现——树
  7. 三种方法求递归算法的时间复杂度(递推,master定理,递归树)
  8. java 刷新jtextarea,SwingPropertyChangeSupport动态更新JTextArea
  9. 目录 - 《ARM嵌入式Linux系统开发从入门到精通》 - 免费试读 - book.csdn.net
  10. SQL Server 2014 SP2