java程序中的异常、log4j错误日志记录 2010-08-01 14:51:23| 分类:
软件开发资料积累 | 标签: |字号大中小 订阅 .
1.1相关英文详解
try 试图 catch 捕获 finally 最终 exception:异常 throw: 抛
arithmetic:算术
mismatch:错配 illegal:不合法 argument:论证
1.2异常处理
(1) try{
有可能出异常的代码;
}catch(异常类型 变量){
异常处理代码;
}
(2)try{
有可能出异常的代码;
}catch(异常类型 变量){
异常处理代码;
}finally{
释放资源语句;
}
(3)try{
有可能出异常的代码;
}finally{
释放资源语句;
}
(4)try{
有可能出异常的代码;
}catch(异常类型 变量){
异常处理代码;
}catch(异常类型 变量){
异常处理代码;
finally{
释放资源语句;
}
1.2异常的
常用类型
Exception:异常层次结构的根类
ArithmeticException:算术错误情形
ArrayIndexOutOfBoundsException:数组小于或大于实际的数组大小
NullPointerException:尝试访问null对象成员
ClassNotFoundException:不能加载所需的类
InputMismatchException:欲得到的数据类型与实际输入的类型不匹配
IllegalArgumentException:方法接收到非法参数
实例说明:
ArithmeticException
InputMismatchException
ArrayIndexOutOfBoundsException
需求:计算类(compute)要求用户输入二个数执行相除并保存结果用异常类进行处理
代码实现:
import java.util.InputMismatchException;//导入异常处理包
import java.util.Scanner;//导入用户输入包
public class Compute {
// 声明数组
private int[] num = new int[2];
// 封装属性
public int[] getNum() {
return num;
}
public void setNum(int[] num) {
this.num = num;
}
/**
* 实现计算
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Compute compute = new Compute();
int result = 0;
int[] num = compute.getNum();
String answer = null;
try {
System.out.println("请输入第一个数字:");
num[0] = input.nextInt();
System.out.println("请输入第二个数字:");
num[1] = input.nextInt();
result = num[0] / num[1];
System.out.println("是否保存结果?(y/n)");
answer = input.next();
if (answer.equalsIgnoreCase("y")) {
num[2] = result;// 试图将计算结果保存到数组中
}
} catch (InputMismatchException e) {
System.out.println("用户输入数据类型错误!");
} catch (ArithmeticException ae) {
System.out.println("发生算术错误!" + ae.getMessage());
} catch (ArrayIndexOutOfBoundsException aee) {
System.out.println("数组
发生越界!");
}catch (Exctption ex) {
System.out.println("程序发生异常,给您带来不便,请重新启动!");
}finally {
System.out.println(num[0] + "除以" + num[1] + "的计算结果为:" + result);
}
}
}
错误分析:
预错误一:用户输入的不是数字时,InputMismatchException捕获到异常,结束程序,输出提示:用户输入数据类型错误!
预错误二: 用户输入的第二个数即除数为0时,ArithmeticException捕获到异常,结束程序,输出提示:发生算术错误!/ by zero
预错误三:程序提示:"是否保存结果?(y/n)",如果输入"Y"后,ArrayIndexOutOfBoundsException捕获到异常,结束程序,输出提示:数组发生越界
因为数据长度为2,而
程序试图"num[2] = result;// 试图将计算结果保存到数组中",发生越界!
预错误四:未知错误,Exception超类捕获到异常,结束程序,输出提示"程序发生异常,给您带来不便,请重新启动!"
注意最后都会输出:
的结果;
总结:
1.finally里面的语句是一定会执行的.
2.try-catch-finally的语法结构只有上面四种
3.(4)中的多重catch中,Exception异常类只能出现在最后面,如果在放于前面,
后面的异常