您的位置:首页 > 职场人生

黑马程序员:JAVA异常处理机制

2012-11-24 13:05 387 查看
------- android培训java培训、期待与您交流!
----------
一 定义
异常:阻止当前方法或作用域继续执行的问题。虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常。绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意。
记得当初总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也对异常有一点感觉了。举一个例子来说明一下异常的用途。

public class Calculator {
public int devide(int num1, int num2) {
//判断除数是否为0
if(num2 == 0) {
throw new IllegalArgumentException("除数不能为零");
}
return num1/num2;
}
public static void main(String[] args)
{
Calculator c = new Calculator();
System.out.println(c.devide(1, 0));
}
}


这个类是关于除运算,如果直接返回计算结果,根本不去考虑什么参数是否正确,是否合法会出错。但是我们应尽可能的考虑周全,所以进行参数的合法性检查就很有必要了。其中执行参数检查抛出来的那个参数非法异常,这就属于这个方法的不正常情况。正常情况下我们会正确的使用计算器,但是不排除粗心大意把除数赋值为0。
二 JAVA异常体系
Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。它有两个子类:Error和Exception。
Error:用于指示合理的应用程序不应该试图捕获的严重问题。这种情况是很大的问题,大到你不能处理了,所以听之任之就行了,你不用管它。比如说VirtualMachineError:当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。好吧,就算这个异常的存在了,那么应该何时,如何处理它呢??交给JVM吧,没有比它更专业的了。
Exception:它指出了合理的应用程序想要捕获的条件。Exception又分为两类:一种是CheckedException,一种是UncheckedException。这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。《effective java》指出:对于可恢复的条件使用被检查的异常(CheckedException),对于程序错误(言外之意不可恢复,大错已经酿成)使用运行时异常(RuntimeException)。
我们常见的RuntimeExcepiton有IllegalArgumentException、IllegalStateException、NullPointerException、IndexOutOfBoundsException等等。对于那些CheckedException就不胜枚举了,我们在编写程序过程中try...catch...捕捉的异常都是CheckedException。io包中的IOException及其子类,这些都是CheckedException。

三 异常使用

下面的例子是演示程序出现异常后代码执行流程。

public class Test1
{
public static void testException1()
{
int[] ints = new int[] { 1, 2, 3, 4 };
System.out.println("异常出现前");
try
{
System.out.println(ints[4]);
System.out.println("???");// 发生异常以后,后面的代码不能被执行
}
catch (IndexOutOfBoundsException e)
{
System.out.println("数组越界错误");
}
System.out.println("异常出现后");
}

public static void main(String[] args)
{
Test1.testException1();
}
}


运行结果:

异常出现前

数组越界错误

异常出现后

public class Test1
{
public static void testException2()
{
int[] ints = new int[] { 1, 2, 3, 4 };
System.out.println("异常出现前");
System.out.println(ints[4]);
System.out.println("???");// 发生异常以后,他后面的代码不能被执行
}
public static void main(String[] args)
{
Test1.testException2();
}
}


运行结果:

异常出现前

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

at Test1.testException2(Test1.java:22)

at Test1.main(Test1.java:27)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: