闪退,我们在使用手机或者电脑的过程中,有时会遇到这种情况,这也是用户最讨厌的情况之一。
一般一个开发软件,如果时常出现闪退的话,用户体验是非常差的。
所以要尽可能避免这种情况的发生。
那为什么会闪退呢?
就是程序它遇到了问题,又没有及时地处理,便只有崩溃了。
而这种情况,便是异常。
在Java世界里面,异常指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。
它本身就是Java里的一个类,最上层的父类是Throwable,其下有两个子类:Error与Exception。
一、Error
Error:错误的意思,无法通过处理来解决的错误。
比如说我创建了一个数组,给它定义的长度为10亿,理论上是可以的,Java又没有要求说数组长度不能有10亿。但是,运行下看看:
OutOfMemoryError:内存溢出。
也就是说,我的电脑内存不够用了,因为创建数组是需要内存的,所以它就报出错误。
这就好比,我们电脑下了一款非常牛逼的单机游戏。
运行的时候发现电脑配置不够,动不动就崩。
电脑又没法拓展,该怎么办?
解决这个问题只有一个方法:换一台电脑,别无他法。
与之对应的,在Java程序里面若是遇到这样的问题,就只能乖乖地修改代码了。
二、Exception
我们平时常说的异常指的就是它,因为它是可以通过程序员的处理将其解决的,所以接触的更加多一点。
比较常见的如下:
ArrayIndexOutOfBoundsException:数组越界异常。
不要看它这么长好像很复杂的样子,其实拆开来看单词都很简单:Array数组;index索引;OutOfBounds超出界限;Exception异常。
合在一起就是数组的索引超出了界限异常,也就是数组越界异常。
那么出现了异常Java里面是如何处理的?
我们举一个抛绣球的例子来说明下jvm处理异常流程。
好,现在有一个异常,被Java虚拟机知道了。
- 这个异常就相当于绣球。
- Java虚拟机就相当于古代抛绣球的女子。
然后就抛绣球,这时候一个人接到了绣球,但是他发现不想娶这个女子,就继续抛给别人,接到的人也不想娶,就一路抛,最后又抛回到了那个女子的手中。
于是女子非常的生气,愤怒地骂了几句就走了。
在Java世界里面:出现了异常,然后都不处理,一直往前抛,最终抛给了Java虚拟机。
于是Java虚拟机非常地生气,打印错误信息,终止了程序。
程序终止这件事情在开发过程中是能不出现就不要出现的。
这也很好理解,你想啊,古代女子若是抛绣球都没人接,多丢人呀,她这辈子大概率不就完了么?
所以出现了异常要处理异常。
当然,我举的这个例子并不准确,只是对于刚接触Java没多久的人来说,可能更好理解。
三、异常的处理
一定要搞清楚,程序员处理异常,不是说这种类型的问题不会出现了,而是说出现了问题要保证程序不能崩溃。
因为用户是不确定的,就比如说用户银行卡里只有10块钱,它提现时硬是要输入10000块,这就会出现异常。
- 如果是Java虚拟机来处理,程序就直接崩溃了呀,这样显然是不行的。
- 而程序员要将其处理成:我们抛出信息,提示用户:“卡内余额不足”,保证程序不会停止运行。
这就是异常的处理,不是说问题再也不会出现了,而是说出现了问题要保证程序不能崩溃,并提示用户。
那么如何处理异常?
方式一:throw
因为Java里面异常本身就是一个类,所以创建对应的异常对象,再抛出说明。
方式二:throws
关键字throws运用于方法上,声明方法内部可能产生异常,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
throws写在方法名后面,后面可以接多个异常,用逗号隔开。
throws本身并没有处理异常,而是提示让方法调用者我这可能有异常,谁调用我得处理,并且也不是说一定就会出现异常,也有可能没有。
throws这个关键字就是警示提醒的作用,并没有处理异常。
方式三:try…catch
真正处理异常了的其实就两种方式:
- throw+创建异常对象,并说明
- try…catch处理异常
-
try:可能会产生异常的代码。
-
catch:用来进行某种异常的捕获,若是出现了括号中的异常,就抛出异常并描述信息,可以多个catch
-
finally:无论异常是否发生,都会执行。
以上就是对于异常的一些基本说明,暂时先就到这儿,明天再继续深入研究异常。
总结: