从头认识java-10.1 为什么需要异常?

这一章节我们来讨论一下为什么需要异常?

原因:逻辑代码与异常代码分离。

注意:异常机制是强制性的。

例子:

下面的代码使用了异常机制。

package com.ray.ch10;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Test {

	public static void main(String[] args) {
		File file = new File("");
		try {
			FileInputStream fis = new FileInputStream(file);
			//dosomething
		} catch (FileNotFoundException e) {
			// TODO 处理异常
			e.printStackTrace();
		}
	}

}


如果没有异常机制,我们的代码可能就会类似下面:

package com.ray.ch10;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Test {

	public static void main(String[] args) throws FileNotFoundException {
		File file = new File("");
		if (file != null) {
			FileInputStream fis = new FileInputStream(file);//逻辑代码部分
		}

	}

}


我们的代码将在逻辑代码里面添加许多判断代码,从而造成代码的可读性降低。

但是引入异常机制,我们将逻辑代码与异常代码分开。

 

但是我们还需要区分一般错误与异常。

一般错误:我们可以在足够的信息支持下处理它。

异常情况:一般是我们估计不到的错误情况,而且没有足够的信息来处理。

我们来看下面的例子,下面的代码模拟输入输出:

package com.ray.ch10;

import java.util.HashMap;

public class Test {

	public static void main(String[] args) {
		HashMap<String, Object> map = new HashMap<String, Object>();// 假设一个map当成是输入内容
		map.put("param1", 0);
		map.put("param2", "O");
		// 上面的0和大O在输入上面没什么太大的区别
		for (String key : map.keySet()) {
			if (map.get(key) != null) {//可以预计的一般错误
				System.out.println(Integer.parseInt(map.get(key).toString()));
			}
		}
	}

}


输出:

0
Exception in thread "main" java.lang.NumberFormatException: For input string: "O"
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 at java.lang.Integer.parseInt(Integer.java:449)
 at java.lang.Integer.parseInt(Integer.java:499)
 at com.ray.ch10.Test.main(Test.java:13)

从上面的结果看出,对于是否为空这种一般性的错误,有足够的信息来处理它,但是对于输入的内容,太难控制,因此这里我们将引入异常机制。

package com.ray.ch10;

import java.util.HashMap;

public class Test {

	public static void main(String[] args) {
		HashMap<String, Object> map = new HashMap<String, Object>();// 假设一个map当成是输入内容
		map.put("param1", 0);
		map.put("param2", "O");
		// 上面的0和大O在输入上面没什么太大的区别
		for (String key : map.keySet()) {
			if (map.get(key) != null) {//可以预计的一般错误
				try {
					System.out.println(Integer
							.parseInt(map.get(key).toString()));
				} catch (NumberFormatException e) {
					System.out.println("请只输入数字");
				}
			}
		}
	}

}


输出:

0
请只输入数字

我们引入了异常机制,逻辑代码没有什么变化,但是多出来的处理异常的代码,将在异常出现后,进行修复性操作或者提示性操作。

注意:由于异常机制的引入,我们把逻辑代码当成一个事务来看待,而且我们通常把异常处理当成事务的最后底线,异常处理代码大多是事务修复性操作。

 

总结:这一章节主要讲述了为什么需要异常,以及辨别一般错误和异常情况。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值