Java异常捕捉机制

1、简介

异常指的是程序运行时出现的非正常情况,Java中的异常捕捉最经常使用到的是try和catch两个代码块。本博客讲解的程序是工程训练基本任务1.4中的问题,该任务我是在4月份初学Java时完成的,故定会有许多不足,若有不足之处,恳请大家指出。


2、基本任务和代码

(1)任务1

1)任务内容
完成c=a/b 的计算并输出c的结果,其中用户可以通过键盘输入a和b的数值(),要求当 b 为0时c的计算结果正确。

2)任务代码
首先需要明确的是除法运算中除数不能为0,即该计算中的b不能为0,若b=0则判断为异常;要求用户可以自行输入a和b的值则需要使用到之前的博客《使用Java实现一元二次方程求根计算器》中讲到的“应声虫”的方法;
由于浮点型变量float和double两种类型的变量在输入b=0后不会抛出异常,所以只能定义整数型变量,在定义了两个整数变量a和b后,该程序的a和b只能输入整数具体代码如下:

import java.util.Scanner;//导入java.util包下的Scanner类
public class Test1{//类名public static void main(String[] args) {//程序主入口函数,带命令行参数while(true){//定义死循环System.out.print("求c=a/b的值"+"\n");//输出标题Scanner in=new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束System.out.print("请输入a的值:");//输出int a=in.nextInt();//用户可自行定义a的值System.out.print("请输入b的值:");//输出int b=in.nextInt();//用户可自行定义b的值try{//try代码块,当发生异常时会转到catch代码块中int c=(a/b);//定义c等于a除以bSystem.out.print("c="+c);//无异常时输出c的值System.out.println(" ");//格式调整}catch(ArithmeticException e){//当try代码块有异常时转到catch代码块System.out.print("输入错误,除数不能为0");//当用户输入b=0时输出异常信息System.out.println(" ");//格式调整}}}
}

3)运行结果
LICEcap截取的动图如下:

(2)任务2

1)任务内容
完成一个计算绝对值表达式 |a-b|的功能要求当b比a大时人为抛出一个自定义异常。

2)任务代码
程序中几乎每一句代码都有注释,故我直接贴代码了:

import java.util.Scanner;//导入java.util包下的Scanner类
public class Test2{//类名public static void main(String[] args) {//程序主入口函数,带命令行参数while(true){//定义死循环System.out.println("求|a-b|的值");//输出标题Scanner in=new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束System.out.print("请输入a的值:");//输出int a=in.nextInt();//用户可自行定义a的值System.out.print("请输入b的值:");//输出int b=in.nextInt();//用户可自行定义b的值int g;//定义一个整型变量gchuliyichang d=new chuliyichang();//创建一个处理异常类的对象try{//try代码块,当发生异常时会转到catch代码块中int c=d.chuli(a,b);//可能出现异常的地方,以此来输出a-bSystem.out.println("|a-b|="+c);//未出现异常则输出c的值System.out.println("此时未出现异常"+"\n");//输出提示}catch(MyException e){//当try代码块有异常时转到catch代码块g=b-a;System.out.print(e);//把接收到的异常信息赋值给e并输出"此时b>a"System.out.println("|a-b|="+g);//出现异常时采用其他方法解决问题System.out.println("此时出现了异常"+"\n");//输出提示}}}
}
class chuliyichang{//定义一个异常类,出现异常时抛出信息public int chuli(int a,int b)throws MyException{//定义一个函数处理异常int g;//定义一个整型变量gif(b>a){//if语句的条件b>athrow new MyException("此时b>a"+"\n");//需要抛出的异常信息}else{g=a-b;//正常情况下输出绝对值}return g;//返回值}
}
class MyException extends Exception{//自定义异常类,继承自Exception类MyException(String msg){//构造函数super(msg);//继承于父类用super}
}

3)运行结果
LICEcap截取的动图如下:


3、挑战任务和代码

(1)任务1

1)任务内容
完成一个 程序,用户自行输入某门课程的成绩的字符串,当输入非法数字(输入值小于0或大于100)时提示成绩输入有误,当输入为非数字的字符串时提示输入格式不合法。

2)任务代码
代码如下:

import java.util.Scanner;//导入java.util包下Scanner类
public class grade {//类名public static void main(String[] args) {//程序主入口函数,带命令行参数while(true){//定义死循环chuliyichang c=new chuliyichang();//创建一个处理异常类的对象System.out.println("求请输入同学的成绩:");//输出标题Scanner in=new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束try{//try代码块,当发生异常时会转到catch代码块中String grade=in.next();//将获取内容赋值给gradec.chuli(grade);//构造函数看是否出现异常}catch(NumException n){//当try代码块有异常时转到catch代码块System.out.println(n);//抛出异常“成绩输入有误”}catch(WordException w){//当try代码块有异常时转到catch代码块System.out.println(w);//抛出异常“输入格式不合法”}}} }
class chuliyichang{//定义一个异常类,出现异常时抛出信息public String chuli(String grade)throws NumException,WordException{//定义函数处理异常for(int i=0;i<grade.length();i++){//对字符串进行遍历if(grade.charAt(i)<'0'||grade.charAt(i)>'9')//if语句判断字符串中的字符小于0或大于9throw new WordException("输入格式不合法"+"\n");//需要抛出的异常信息}int gradea=Integer.parseInt(grade);//将字符串转换为int型if(gradea<0||gradea>100)//if语句判断成绩小于0或大于100throw new NumException("成绩输入有误"+"\n");//需要抛出的异常信息return grade;//返回}
}
class WordException extends Exception{//自定义异常类,继承自Exception类WordException(String msg){//构造函数super(msg);//继承于父类用super}
}
class NumException extends Exception{//自定义异常类,继承自Exception类NumException(String msg){//构造函数super(msg);//继承于父类用super}
}

3)运行结果
LICEcap截取的动图如下:

(2)任务2

1)任务内容
完成一个程序,用户通过键盘输入用户名和密码的两个String类对象,然后程序进行判断,若用户名或密码为null,抛出自定义异常并结束程序;若输入密码长度小于6个字符,抛出自定义异常并结束程序;若用户名和密码不等于事先指定的字符串,抛出自定义异常并结束程序;否则输出提示“用登录成功”。

2)任务代码
我将用户名设置为luosiyang,密码为726726,然后通过该程序进行输入的判断,由于在抛出异常时要结束程序,故我未使用while循环,该程序代码如下:

import java.util.Scanner;//导入java.util包下Scanner类
public class register {//类名public static void main(String[] args) {//程序主入口函数,带命令行参数chuliyichang c=new chuliyichang();//创建一个处理异常类的对象Scanner in=new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束String s1;//定义字符串变量s1String s2;//定义字符串变量s2try{//try代码块,当发生异常时会转到catch代码块中System.out.println("请输入账户和密码:");//输出提示信息c.chuli(s1=in.nextLine(),s2=in.nextLine());//构造函数,并在用户输入信息后判断是否异常}catch(error e){//当try代码块有异常时转到catch代码块System.out.println(e);//输出异常信息“账户或密码输入错误”System.exit(0);//程序结束}catch(minerror m){//当try代码块有异常时转到catch代码块System.out.println(m);//输出异常信息“密码长度不能小于六个字符”System.exit(0);//程序结束}catch(wordnull w){//当try代码块有异常时转到catch代码块System.out.println(w);//输出异常信息“账户和密码不能为空”System.exit(0);//程序结束}}
}
class chuliyichang{//定义一个异常类,出现异常时抛出信息public void chuli(String s1,String s2)throws error,minerror,wordnull{//定义函数处理异常if(s1.equals("")||s2.equals("")){//if语句判断账户和密码是否为空throw new wordnull("账户和密码不能为空");//需要抛出的异常信息}if(s2.length()<6){//if语句判断密码长度是否小于六个字符throw new minerror("密码长度不能小于六个字符");//需要抛出的异常信息}if(!s1.equals("luosiyang")||!s2.equals("726726")){//判断账户密码是否输入正确throw new error("账户或密码输入错误");//需要抛出的异常信息}else System.out.println("用户登录成功");//如果输入正确则输出该信息}
}
class error extends Exception{//自定义异常类,继承自Exception类error(String msg){//构造函数super(msg);//继承于父类用super}
}
class minerror extends Exception{//自定义异常类,继承自Exception类minerror(String msg){//构造函数super(msg);//继承于父类用super}
}
class wordnull extends Exception{//自定义异常类,继承自Exception类wordnull(String msg){//构造函数super(msg);//继承于父类用super}
}

3)运行结果
由于未使用while循环,故需要运行程序四次分别实验,所以这个程序的运行就不使用LICEcap截取动图了,运行结果如下:
a、当输入为空时该程序的输出为:

b、当输入的密码过短时的输出为:

c、当输入的密码不正确时的输出为:

d、当输入的账户和密码正确时的输出为:

从四次不同输入的输出结果中可以看出,每当有异常情况发生时该程序都能正确捕捉异常并把异常信息抛出。

4、总结

由于我是一个初学者,故编写的程序中定会有一些不足,请大家别太介意,对于该程序的实现过程有许多我未写出,如果需要更加详细的实现过程,可以在评论区留下邮箱,我会把训练任务的word文档进行分享。

Java异常捕捉机制相关推荐

  1. java完成计算c=a/b 并输出结果 (java异常捕捉机制 )

    文章目录 一.java异常处理 1. Java 的非检查性异常: 2.Java 定义在 java.lang 包中的检查性异常类: 3.捕获异常 二.小任务:完成c=a/b 的计算并输出c的结果 一.j ...

  2. 【转载】Java异常控制机制和异常处理原则

    转载自Java异常控制机制和异常处理原则 Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能 ...

  3. Python的try... excep异常捕捉机制

    Python的try... excep异常捕捉机制 一.没有加入异常捕捉机制 二.加入try ... except 异常捕捉 1.已知错误类型 (例如下面已知列表索引错误类型`IndexError`) ...

  4. 【JAVA】异常捕捉机制(2)—异常(Exception)的分类处理方式

    一.前言 前面我们说到异常(Exception)的概念与分类,所谓异常就是程序在运行的过程中出现的一些中断程序的例外问题,我们将其称之为异常. JDK 中定义了很多派生于Throwable类的异常类, ...

  5. java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    前言: java 中的异常处理机制你真的理解了吗?掌握了吗? catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.ex ...

  6. java异常类型和基本处理原则_Java异常控制机制和异常处理原则

    Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解 ...

  7. java异常_聊聊Java中的异常及处理

    前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...

  8. 程序员基本功08异常捕捉的陷阱

    1.使用finally正确地关闭资源 在实际开发中,经常需要 在程序中打开一些物理资源,如数据库连接.网络连接.磁盘文件等,打开这些物理资源后必须显示关闭,否则将引起资源泄露.JVM的垃圾回收机制属于 ...

  9. 代码行为异常容错机制与自我调节

    目录 1.吧啦吧啦吧啦 1.1.代码自我意识 1.2.代码功能安全 1.3.代码保密性 1.4.代码执行完整性 1.5.代码的容错机制与自我调节 2.设计观与方法论 2.1 设计观与代码容错机制.自我 ...

最新文章

  1. 关于xilinx fir use reloadable coefficient的用法
  2. Linux下的硬链接和软链接
  3. Github 代码上边的Raw、Blame、History是啥意思?
  4. PyCairo 中的基本绘图
  5. Elasticsearch教程 IK分词器安装
  6. Vue页面骨架屏(一)
  7. CSharp for Jupyter Notebook
  8. Android下Cocos2d创建HelloWorld工程
  9. 华三防火墙h3cf100配置双宽带_华三防火墙冗余口配置 h3c f100防火墙配置教程
  10. 自定义Writable类型
  11. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
  12. Atitit.php opcode虚拟机指令集 分类以及详细解释
  13. win10安装mysql-8.0.12-winx64解压版
  14. 图像尺寸与图像像素、分辨率的关系
  15. 富集分析(GO、KEGG、GSEA)
  16. 基于STM32根据DL/T 645-2007通讯协议利用RS485进行抄表并将电压等数据利用HC-05蓝牙实时传输至上位机显示
  17. 开工干活累了,晚上不得找个陪玩打打游戏?我教你们用python找个人美声甜的
  18. Json是什么?要怎样理解?
  19. preg_replace函数去除字符串中的空格,逗号(,)等
  20. 使用Velocity导出Word文档

热门文章

  1. php页面居中,html如何让网页居中
  2. Qt仿QQ截图最新版本,放大镜、坐标、颜色复制、画图形、文字、箭头、马赛克、序号都有,支持颜色面板,支持拖动和修改,支持撤销、钉住、屏幕录制
  3. Swift开发遇到的一些问题
  4. <Linux开发>linux开发工具- 之-FileZilla
  5. 深度学习系列之Gaussian_YOLOv3 个人总结
  6. 【行业案例分享】图吧MPS混合定位
  7. html围绕中间圆心布局,「飞亚达空间站」主题展的看点都在这儿,全新代言人居然是他?...
  8. 小猫爪:AWR294x学习笔记01-AWR294x之MCAN
  9. 什么是数据仓库,为什么要建立数据仓库?
  10. Oracle 单字段拆分成多行