10月2号-异常处理

来源:互联网 发布:c语言中如何定义数组 编辑:程序博客网 时间:2024/04/28 14:28

1.  异常处理入门

异常在JAVA中代表一个错误的实体对象。异常有:预期中可能发生的异常,编译器会提醒您先行处理。对于一些程序运行时发生的执行时异常,您有机会捕捉这些异常,并尝试将程序恢复到正常运行状态。

在程序中可以使用try,catch,finally3个关键词组合的语法来达到。其语法如下:

public class demo {

     try{

     //执行的语句

     }

     catch{

     //异常处理

     }

     finally{

     //一定会处理的语句

     }

}

 

try区块必须有对应的catch区块或finally区块。Try可以搭配多个catch区块,如果设置了catch区块那么finally区块可以有也可以不要。如果没有设置catch那么就一定要设置finally.

/*如果执行程序时没有指定变量,那么args数组的长度是0,程序中尝试从args[0]取得变量时就会发生错误

错误的实例是ArrayIndexOutOfBoundsException,这个实例就会被对应的catch区块捕捉到,在范例中给

异常对象指定名字e,异常被捕捉后会执行对应的catch区块,在范例中显示提示信息,使用printStackTrace()

方法显示异常信息。

 */

public class CheckArgsDemo {

 

    public static void main(String[] args) {

       try {

           System.out.println("执行数组" + args[0]);

       }

       // ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。

 

       catch (ArrayIndexOutOfBoundsException e) {

           System.out.println("没有指定变量");

           e.printStackTrace();

       }

 

    }

}

2.可控式异常(Checked Exception)和执行时异常(Runtime Exception

可控式异常是可预测的,例如使用输入输出功能时,可能会由于硬件原因,使得程序无法正常从硬件取得输入或进行输出。这样的错误是可以预期发生的,像这样的类的异常称为可控式异常。对于可控式异常编译器会要求您进行异常处理,例如在使用java.io.BufferedReaderreadLine()方法取得用户的输入时,编译器会明确要求您在程序中告知如何处理java.io.IOException.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

public class CheckedExceptionDemo {

    public static void main(String[] args) {

       try {

           BufferedReader buf = new BufferedReader(new InputStreamReader(

                  System.in));

           System.out.println("请输入整数:");

           int input = Integer.parseInt(buf.readLine());

           System.out.println("input*10=" + (input * 10));

       } catch (IOException e) {//可控式异常

           System.out.println("I/O错误");

       } catch (NumberFormatException e) {//执行时异常

           System.out.println("输入的必须是整数");

       }

    }

 

}

 

上面例子试着从用户输入取得一个整数值,由BufferedReader对象所读取到的输入是一个字符串,您使用Integer类的parseInt()方法试着剖析该字符串为整型,如果无法剖析,则会发生错误并丢出一个NumberFormatException异常对象。当这个异常丢出后,程序会离开当前执行的位置。而如果设置的catch捕捉这个异常,则会执行catch区块里面的语句。

 

3.throwthrows

如果想自己丢出异常,可以使用throw关键词。

举个例子:在JAVA中除法中,允许浮点数运算时除数为0,所得到的结果是Infinity,也就是无穷大数。如果想要自行检验除零错误,可以自行丢出ArithmeticException异常。这个异常是在整数除法且除数为0时所引发的异常,可以让浮点数运算除数为0时也丢出这个异常。

如:

public class ThrowDemp {

 

    public static void main(String[] args) {

       try {

           double data = 100 / 0.0;

           System.out.println("浮点数除以0" + data);

           if (String.valueOf(data).equals("Infinity")) {

              throw new ArithmeticException("除零异常");

           }

       } catch (ArithmeticException e) {

           System.out.println(e);

       }

 

    }

 

}

 

 

4.异常的继承架构

JAVA所处理的异常分为2大类:一种是严重的错误,一般是硬件问题或是内存不足等问题,与此相关的类是位于java.lang下的Error类及其子类,这类的错误程序是没有办法恢复的。

还有一种是:非严重错误。例如用户输入的不合格式的数据等等问题,位于java.lang下的Exception类及其子类。

 

Error类和Exception类都是继承Throwable类。可以参看API。这里不讲了。

 

原创粉丝点击