您的位置:首页 > 编程语言 > Java开发

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

2015-11-23 22:08 561 查看
这一章节我们来讨论一下为什么需要异常?
原因:逻辑代码与异常代码分离。
注意:异常机制是强制性的。
例子:
下面的代码使用了异常机制。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
请只输入数字

我们引入了异常机制,逻辑代码没有什么变化,但是多出来的处理异常的代码,将在异常出现后,进行修复性操作或者提示性操作。
注意:由于异常机制的引入,我们把逻辑代码当成一个事务来看待,而且我们通常把异常处理当成事务的最后底线,异常处理代码大多是事务修复性操作。
 
总结:这一章节主要讲述了为什么需要异常,以及辨别一般错误和异常情况。
 这一章节就到这里,谢谢。-----------------------------------目录
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java