Java异常捕捉机制
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异常捕捉机制相关推荐
- java完成计算c=a/b 并输出结果 (java异常捕捉机制 )
文章目录 一.java异常处理 1. Java 的非检查性异常: 2.Java 定义在 java.lang 包中的检查性异常类: 3.捕获异常 二.小任务:完成c=a/b 的计算并输出c的结果 一.j ...
- 【转载】Java异常控制机制和异常处理原则
转载自Java异常控制机制和异常处理原则 Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能 ...
- Python的try... excep异常捕捉机制
Python的try... excep异常捕捉机制 一.没有加入异常捕捉机制 二.加入try ... except 异常捕捉 1.已知错误类型 (例如下面已知列表索引错误类型`IndexError`) ...
- 【JAVA】异常捕捉机制(2)—异常(Exception)的分类处理方式
一.前言 前面我们说到异常(Exception)的概念与分类,所谓异常就是程序在运行的过程中出现的一些中断程序的例外问题,我们将其称之为异常. JDK 中定义了很多派生于Throwable类的异常类, ...
- java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
前言: java 中的异常处理机制你真的理解了吗?掌握了吗? catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.ex ...
- java异常类型和基本处理原则_Java异常控制机制和异常处理原则
Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能在编译期间侦测到,有些问题必须在运行期间解 ...
- java异常_聊聊Java中的异常及处理
前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...
- 程序员基本功08异常捕捉的陷阱
1.使用finally正确地关闭资源 在实际开发中,经常需要 在程序中打开一些物理资源,如数据库连接.网络连接.磁盘文件等,打开这些物理资源后必须显示关闭,否则将引起资源泄露.JVM的垃圾回收机制属于 ...
- 代码行为异常容错机制与自我调节
目录 1.吧啦吧啦吧啦 1.1.代码自我意识 1.2.代码功能安全 1.3.代码保密性 1.4.代码执行完整性 1.5.代码的容错机制与自我调节 2.设计观与方法论 2.1 设计观与代码容错机制.自我 ...
最新文章
- 关于xilinx fir use reloadable coefficient的用法
- Linux下的硬链接和软链接
- Github 代码上边的Raw、Blame、History是啥意思?
- PyCairo 中的基本绘图
- Elasticsearch教程 IK分词器安装
- Vue页面骨架屏(一)
- CSharp for Jupyter Notebook
- Android下Cocos2d创建HelloWorld工程
- 华三防火墙h3cf100配置双宽带_华三防火墙冗余口配置 h3c f100防火墙配置教程
- 自定义Writable类型
- mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程
- Atitit.php opcode虚拟机指令集 分类以及详细解释
- win10安装mysql-8.0.12-winx64解压版
- 图像尺寸与图像像素、分辨率的关系
- 富集分析(GO、KEGG、GSEA)
- 基于STM32根据DL/T 645-2007通讯协议利用RS485进行抄表并将电压等数据利用HC-05蓝牙实时传输至上位机显示
- 开工干活累了,晚上不得找个陪玩打打游戏?我教你们用python找个人美声甜的
- Json是什么?要怎样理解?
- preg_replace函数去除字符串中的空格,逗号(,)等
- 使用Velocity导出Word文档
热门文章
- php页面居中,html如何让网页居中
- Qt仿QQ截图最新版本,放大镜、坐标、颜色复制、画图形、文字、箭头、马赛克、序号都有,支持颜色面板,支持拖动和修改,支持撤销、钉住、屏幕录制
- Swift开发遇到的一些问题
- <Linux开发>linux开发工具- 之-FileZilla
- 深度学习系列之Gaussian_YOLOv3 个人总结
- 【行业案例分享】图吧MPS混合定位
- html围绕中间圆心布局,「飞亚达空间站」主题展的看点都在这儿,全新代言人居然是他?...
- 小猫爪:AWR294x学习笔记01-AWR294x之MCAN
- 什么是数据仓库,为什么要建立数据仓库?
- Oracle 单字段拆分成多行