首页 > 代码库 > Java之旅(一)---说说“异常”那些事

Java之旅(一)---说说“异常”那些事


     从开始学习VB,就听说过“异常”,觉得异常处理就是加上try..catch,不让错误抛出给用户,到此为止,不要再往下问了,再问也不会了。这就是那时候的理解。现在随时项目经验的增多和Java基础的学习,对于“异常处理”有了一些不一样的感触,现写出和大家分享。


                                               Java异常:基础知识                                                       


(1)异常和错误

     在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,给你一次修改的机会。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception


    而与异常对应的错误则是指一个合理的应用程序不能截获的严重的问题。大多数都是反常的情况。错误是VM的一个故障(虽然它可以是任何系统级的服务),比如内存溢出。和异常一样,在Java中用错误类来表示错误,不同的错误类代表了不同的错误。但是在Java中所有的错误都有一个基类,叫做Error


(2)异常的结构分类

    主要包括运行时异常编译时异常。运行时异常即RuntimeException是指未检查的错误,是程序员处理的一大难点;而编译时异常则是已检查的错误。

    上述介绍中有提到,Java中不同的异常类代表了不同的异常。关于运行时异常主要有以下几个子类:


    1
java.lang.ArrayIndexOutOfBoundsException
    数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。


    2
java.lang.ArithmeticException
    算术条件异常。譬如:整数除零等。


    3
java.lang.NullPointerException
    空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的
属性、计算null对象的长度、使用throw语句抛出null等等


    4
java.lang.ClassNotFoundException
    找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。


    知道上述几个异常子类是是很必要的,它可以让我们针对性极强的去处理这些异常,解决错误。


                                               Java异常:处理方式                                                       


    了解Java中的异常之后,就需要知道该如何处理了。处理方式有以下两种:

1)捕捉

    对于捕捉方式,Java有针对性的处理方式,也就是我们常说的try…catch

try {

//需要被检测的代码;

}

catch(异常类 变量名){

//异常处理代码;

}

fianlly{

//一定会执行的代码;主要让用户关闭资源。无论是否发生异常,资源都必须进行关闭。

}

    而在程序中,我们通常使用以下方式来显示异常信息:

catch (Exception e) {      //e用于接收try检测到的异常对象。

  System.out.println("message:"+e.getMessage());    //获取的是异常的信息。

System.out.println("toString:"+e.toString());    //获取的是异常的名字+异常的信息。

  e.printStackTrace();     //打印异常在堆栈中信息;异常名称+异常信息+异常的位置。

}

(2)抛出

1.抛出异常的方法

    在方法声明中,添加throws子句表示该方法将抛出异常。带有throws子句的方法的声明格式如下: 

[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>] 

    其中,throws是关键字,<异常类>是方法要抛出的异常类,可以声明多个异常类,用逗号隔开。

public void  test(byte  a) throws Exception {    /抛出异常       
 try{ 

     if(a>Byte.MAX_VALUE/i)      //Integer类的常量,表示最大值           
        throw new Exception("overflow");  //溢出时抛出异常      
 } 

 catch(Exception e){ 

System.out.println("exception:"+e.getMessage());              

e.printStackTrace(); 

2.由调用方法处理异常

    如果某个方法声明抛出异常,则调用它的方法必须捕获及处理异常,否则会出现异常错误,注意即可不再多说。


    以上对Java异常的基础知识和处理方式进行了大概的描述,还有不仅如意的地方,继续慢慢领悟!

Java之旅(一)---说说“异常”那些事