课后作业java常用的异常处理情况

在c++中我们的异常处理一般是返回一个数值,通过判断数值来决定执行那一步,但在java中引入了异常类

可以供我们方便的处理异常下面介绍一些java异常类的基本结构:

 Throwable是所有异常类的基类,它之下分为:Error与Exception.

其中Error是严重错误,一般为硬件错误,我们一般无法处理,

Exception是程序本身可处理的错误,它之下有RuntimeException(运行时的错误)

编译时不做检查出现问题回来修改代码,以及非运行时错误编译期间几必须处理否则无法编译。

下面来介绍java常用的异常处理情况:

1.java.lang.NullPointerException

空指针异常,这个经常碰到十分讨厌,一般就是使用了未经初始化的对象,比如使用对象数组时:

Student[] stu=new Student[10];
        for(int i=0;i<10;i++)
        {
            stu[i].setAge(i);
        }

 我们没有给数组的每个对象初始化所以出现了空指针异常,修改后如下:

        Student[] stu=new Student[10];
        for(int i=0;i<10;i++)
        {
            stu[i]=new Student();
            stu[i].setAge(i);
        }

我们可以在使用对象时判断对象是否为空一次来避免空指针异常。

2.java.lang.ArrayIndexOutOfBoundsException

这个是数组下标越界异常,也是比较常见的异常,我们在使用数组尤其是下标是变量时十分容易导致下标越界,

为了避免下标越界,我们可以调用length函数,与变量比较,这样就可以避免下标越界的问题了。

如下面就存在下标越界的问题:

        int str[]= {1,2,3,4,5,6,7,8,9};
        for(int i=0;i<=10;i++)
        {
            System.out.println(str[i]+" ");
        }

 字符串也存在下标越界的异常:StringIndexOutOfBoundsException

        String str="123456789";
        for(int i=0;i<=10;i++)
        {
            System.out.print(str.charAt(i));
        }

 3.java.lang.ArithmeticException

数学运算异常,通常就是0作为除数导致的,一般我们不会把零作为除数,也会有意识的避免,

但是如果除数是一个表达式,那么除数就变得不可控了。所以我们可以判断一下除数是否为零来避免。

下面是错误代码:

    public static void main(String[] a) 
    {
        int i=100,j=0,m=i/j;
        System.out.print(m);

    }

 4.java.lang.ClassCastException

数据类型转换错误,将父类强制转换为子类的实例时会发生此异常,强制类型转换十分容易出错,我们一定要对类型进行判断。

             People p=new People();
    Student stu=(Student) p;

 5.ava.lang.ClassNotFoundException

这个异常是很多原本在JB等开发环境中开发的程序员,把JB下的程序包放在WTk下编译经常出现的问题,

异常的解释是“指定的类不存在”。这里主要考虑一下类的名称和路径是否正确即可,如果是在JB下做的程序包,

一般都是默认加上Package的,所以转到WTK下后要注意把Package的路径加上。

6.java.lang.Error

错误,是所有错误的基类,用于标识严重的程序运行问题,这些问题通常描述一些不应该被应用程序捕获的反常情况。

原因:对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;系统访问的外部资源出现异常情况。

解决方法:访问外部资源之前,首先检查该资源(如数据库)是否可正常连接或操作;访问外部资源时,如果进行了连接,一定要关闭操作,并且仅进行一次关闭操作;尽量在同一操作中共享外部资源,以减少该操作对资源的浪费,提高程序的执行效率。

下面总结一下java的try...catch的规律;

java通过try...catch实现对于异常的处理,如果没有try..catchjava虚拟机将退出。

不管异常是否出现finally的语句一定会被执行。

当有多个catch时java会从上到下匹配,找到后执行catch中的语句,且之后的catch不会被执行

内层try的异常不仅仅会在内层寻找与之配对的catch,也会在外层寻找。

.内层抛出了异常如果与之匹配的catch实在外层的则外层的异常并不会抛

嵌套的finally是否执行取决于出错的位置:若最内层出错,则毫无疑问所有的finally都会执行。

若在外层出错:由于语句会从上到下执行,若外层出错位置在内层finally之后则会执行内层的finally否则不会执行(不管内层有没有错误)。

原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/13899557.html