技术分享|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类。

三、 throwthrowstry-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或者继续throwsthrows抛出的是运行时异常既不用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人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930