技术分享|Java异常总结

2018-09-07 15:59:17

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。接下来,西安中软卓越的老师着重介绍了Java异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。

技术分享|Java异常总结.jpg

一、异常分类

1)运行时异常(checked exception):继承自java.lang. RuntimeException

常见5种:

ClassCastException(类型转换异常)

IndexOutOfBoundsException(数组越界)

NullPointerException(空指针)

ArrayStoreException(数据存储异常,操作数组时类型不一致)

还有IO操作的BufferOverflowException异常

2)非运行时异常(unchecked exception):继承自java.lang.Exception

常见:

Java。lang。ClassNotFoundException

Java。lang。NoSuchMetodException

java。io。IOException

二、两种异常的区别:

Checked异常必须被显式地捕获或者传递,而unchecked异常则可以不必捕获或抛出。

Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。

三、 throw,throwstry-catch的联系

1throw:自己手动抛出异常。或者说此处一定会出异常。

比如年龄是负的,我们需要自己手动引发异常,这就是throw的作用。

注意:

如果方法fun1()throw抛出的是非运行时异常,则该方法必须用throws抛出,否则编译不会通过。假如fun2()调用fun1(),要将fun1()放在fun2()try中或者fun2继续throws,否则也编译不通过。

例如:

public void fun1(int m) throws Exception{

        int age=m;

        if (age<0) {

            throw new Exception();

        }

}

public void fun2() {

    try {

        fun1(-1);          

    } catch (Exception e) {

        System。out。println("年龄不能为负");

    }

}

如果方法fun1()throw抛出的是运行时异常,fun1既不用throwsfun2也不用try,编译也会通过。例如:

public void fun1(int m){

    int age=m;

    if (age<0) {

        throw new IndexOutOfBoundsException();

    }

}

//这样编译没问题,但运行会崩溃

public void fun2() {

     fun1(-1);          

}

//这样运行,不会崩溃,因为做了处理

public void fun3() {

try {

    fun1(-1);       

} catch (Exception e) {

    System。out。println("出异常了~");

}       

}

因为运行时异常产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。

2throws:用在方法声明后,表示方法可能会抛出异常。

如果一个方法会有异常,但你并不想处理这个异常,就在方法名后面用throws,这样这个异常就会抛出,谁调用了这个方法谁就要try- catch处理这个异常,或者继续throws抛出。

总之,用throws抛出非运行时异常的方法,调用它的方法必须try-catch或者继续throws。throws抛出的是运行时异常既不用throws,也不用try-catch。

例如:

public class CheckedExceptionMethods 

    // 总异常类,既有checkedException又有RuntimeException,所以其中的checkedException必须处理 

    public void method1() throws Exception 

    { 

        System.out.println("我是抛出异常总类的方法"); 

    } 

    // 捕获并处理这个异常 

    public void testMethod1_01() 

    { 

        try 

        { 

            method1(); 

        } 

        catch (Exception e) 

        { 

            e.printStackTrace(); 

        } 

    } 

    // 把异常传递下去,继续抛出

    public void testMethod1_02() throws Exception 

    { 

        method1(); 

    } 

}

3try{}catch(想要处理的异常种类){}

如果觉得方法内可能会产生异常,可以自己进行处理,调用者就不用再try-catch,例如:

public void fun1() {

    int[] a={1,2,3};

    try {

        System。out。println(a[3]);

    } catch (Exception e) {

        System.out.println("数组越界了~");

    }      

}

public void fun2() {

         fun1();

}

也可以偷懒不做处理,让调用者处理,例如:

public static void fun1() throws Exception{

    int[] a={1,2,3};

        System.out.println(a[3]);         

}

public void fun2() {

    try {

        fun1();    

    } catch (Exception e) {

        System。out。println("数组越界了~");

    }      

}

以上纯属西安中软卓越老师个人的经验和总结,事物都是辩证的,没有绝对的原则,适合自己的才是最有效的原则。希望以上的讲解和分析可以对您有所帮助。

作为一名开发人员,技术是立身的根本,是拴马桩的尊严;对于一个做教育机构,口碑如水是生命之源,是长盛不衰的根本。13年历经风雨依然昂首前行,未来的西安中软卓越同样会恪守初心,以技术立身,培养IT精英,捍卫教育本质。

本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

【中软卓越】-中软国际旗下高端教育品牌,是中软国际有限公司投资的大型人才服务机构,是中软国际人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、蚂蚁软件方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题
pc蛋蛋 pc蛋蛋网 河北快三平台 湖北快3官网 河北快3 pc蛋蛋28 pc蛋蛋导航 pc蛋蛋开奖 pc蛋蛋网站 河北快3