Java Web简明教程–Java篇[6]–处理异常

点此查看 所有教程、项目、源码导航

之前一篇已经描述了如何在工作中处理一些突如其来的错误——异常,但是大王应该还是不会满意的,决策者的时间是很宝贵的,汇报的时候应该有针对性,要总结,不能乱七八糟的就把问题抛给大王,所以刑部连夜加班,修改制度流程如下:

import java.util.Scanner;//导入用于获取控制台输入的类Scanner
public 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;//导入用于获取控制台输入的类Scanner
public 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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值