猫哥带你去战斗——Java Web开发——Java篇[6]——处理异常
来源:互联网 发布:人工智能都有哪些 编辑:程序博客网 时间:2024/06/05 17:03
之前一篇已经描述了如何在工作中处理一些突如其来的错误——异常,但是大王应该还是不会满意的,决策者的时间是很宝贵的,汇报的时候应该有针对性,要总结,不能乱七八糟的就把问题抛给大王,所以刑部连夜加班,修改制度流程如下:
import java.util.Scanner;//导入用于获取控制台输入的类Scannerpublic class ExceptionDemo {//异常演示的例子 public static void main(String[] args) { while(true){ //使用无限循环模拟永远在线等待指令的场景 Scanner sc = new Scanner(System.in); System.out.println("大王,我们刑部这次要除掉哪个奸臣:"); String command = sc.nextLine();//模拟获取大王指令 int army=100;//总兵力 try{//可能有错误的语句放在try里面 int commandInt=Integer.parseInt(command);//理解大王旨意,军机处比较傻,只能理解数字 int result=army/commandInt; System.out.println("大王,搞定,我们除掉【"+commandInt+"】了!");//模拟响应用户指令 } catch(ArithmeticException exArithmetic){ System.out.println("大王,搞定,我们在搞掉【"+command+"】时遇到了算术问题,任务失败"); } catch(NumberFormatException exNumber){ System.out.println("大王,搞定,我们在搞掉【"+command+"】时遇到了字符串转换问题,任务失败"); } catch(Exception ex){//此处在下面测试中不会执行,为何? System.out.println("大王,我们遇到问题了:"+ex.getMessage()); }finally{ System.out.println("大王,之前"+command+"事情都过去了,您看还有需要什么要指示的吗?"); } } }}
此时,刑部响应大王指令的过程如下:
大王,我们刑部这次要除掉哪个奸臣:0大王,搞定,我们在搞掉【0】时遇到了算术问题,任务失败大王,之前0事情都过去了,您看还有需要什么要指示的吗?大王,我们刑部这次要除掉哪个奸臣:张三大王,搞定,我们在搞掉【张三】时遇到了字符串转换问题,任务失败大王,之前张三事情都过去了,您看还有需要什么要指示的吗?大王,我们刑部这次要除掉哪个奸臣:
这下,问题经过整理后抛出,便于决策者分析。那么常见的有哪些问题呢(异常)。
刚刚上文提到的两种是非常好理解的,ArithmeticException 是数学计算异常,NumberFormatException是 数字转换格式异常。好的,平时常用的异常稍微总结下:
NullPointerException:空指向异常,如果一个对象没new 直接使用,所以引用没有指向堆的地址,所以引用没有意义啊,那是要报错的。ArrayIndexOutOfBoundsException:数组下标越界,这个好理解。EOFException:文件已结束。FileNotFoundException:文件未找到。SQLException:数据库异常NoSuchMethodException:方法未找到ClassNotFoundException:找不到类异常
好的,不管Java中提供了多少种未定义的异常,总有它想不到的或者是我们想设置的,比如,如果大王自己规定,人名不能是负数,这种要算大王糊涂错误,那怎么处理呢,不要紧,可以自定义异常。如下自定义一个异常类:
public class MinusException extends Exception{//自定义异常类,因为继承了Exception类,所以成为了异常家族的一员 public MinusException(String message)//构造函数,包含一条消息 { super(message); } }
好的,这样使用即可:
import java.util.Scanner;//导入用于获取控制台输入的类Scannerpublic class ExceptionDemo {//异常演示的例子 public static void main(String[] args) { while(true){ //使用无限循环模拟永远在线等待指令的场景 Scanner sc = new Scanner(System.in); System.out.println("大王,我们刑部这次要除掉哪个奸臣:"); String command = sc.nextLine();//模拟获取大王指令 int army=100;//总兵力 try{//可能有错误的语句放在try里面 int commandInt=Integer.parseInt(command);//理解大王旨意,军机处比较傻,只能理解数字 int result=army/commandInt; if(result<0) throw new MinusException("负数错误,负数为:"+commandInt); System.out.println("大王,搞定,我们除掉【"+commandInt+"】了!");//模拟响应用户指令 } catch(MinusException exMinus){ System.out.println("大王,搞定,我们在搞掉【"+command+"】时遇到了"+exMinus.getMessage()); } catch(ArithmeticException exArithmetic){ System.out.println("大王,搞定,我们在搞掉【"+command+"】时遇到了算术问题,任务失败"); } catch(NumberFormatException exNumber){ System.out.println("大王,搞定,我们在搞掉【"+command+"】时遇到了字符串转换问题,任务失败"); } catch(Exception ex){ System.out.println("大王,我们遇到问题了:"+ex.getMessage()); ex.printStackTrace(); }finally{ System.out.println("大王,之前"+command+"事情都过去了,您看还有需要什么要指示的吗?"); } } }}
大王看到这个报告,终于露出了会心的笑容:小子们,你们的路还长着呢,嘿嘿嘿嘿
大王,我们刑部这次要除掉哪个奸臣:-1大王,搞定,我们在搞掉【-1】时遇到了负数错误,负数为:-1大王,之前-1事情都过去了,您看还有需要什么要指示的吗?大王,我们刑部这次要除掉哪个奸臣:
0 0
- 猫哥带你去战斗——Java Web开发——Java篇[6]——处理异常
- 猫哥带你去战斗——Java Web开发——Java篇[5]——大王,有异常!
- 猫哥带你去战斗—Java Web开发—Java篇[13]—联表操作
- 猫哥带你去战斗—Java Web开发—Java篇[14]—数据库操作简化
- 猫哥带你去战斗—Java Web开发—Servlet篇[2]—get与post
- 猫哥带你去战斗—Java Web开发—Servlet篇[3]—获取网页数据
- 猫哥带你去战斗——Java Web开发——开发环境介绍[0]
- 猫哥带你去战斗——Java Web开发——开发环境介绍[1]
- 猫哥带你去战斗——Java Web开发——开发环境介绍[2]
- 猫哥带你去战斗——Java Web开发——网页篇[6]——布局
- 猫哥带你去战斗—Java Web开发—Servlet篇[6]—漂亮的终结篇
- 猫哥带你去战斗——Java Web开发——前言[0]
- 猫哥带你去战斗——Java Web开发——Java篇[0]——小谈动态网页
- 猫哥带你去战斗——Java Web开发——Java篇[1]——从内存讲起
- 猫哥带你去战斗——Java Web开发——Java篇[2]——Hello World
- 猫哥带你去战斗——Java Web开发——Java篇[3]——常用类型
- 猫哥带你去战斗——Java Web开发——Java篇[4]——常用容器
- 猫哥带你去战斗——Java Web开发——Java篇[7]——认识数据库
- 【Unity&光照】Unity光照资料总览
- 8,词根 - 切分、部分
- iOS多张图片总是只能上传一张的问题
- 微视界app开发练习
- Bootstrap Validate表单验证
- 猫哥带你去战斗——Java Web开发——Java篇[6]——处理异常
- 将网页分享到微信带有缩略图和简介
- Selenium获取并验证下拉框选项值
- python 安装
- jquery的ajax详解
- Windows2008 r2 x64下安装FTP工具File Zilla server报错:could not load tls libraries filezilla
- Java NIO系列教程(九) ServerSocketChannel
- ETC1压缩纹理格式
- Plugin execution not covered by lifecycle configuration的解决方案