作为程序开发人员,我们必然都见过代码运行后抛出的异常。初学者见到程序运行后没有出现预期的结果,而是出现了看都看不懂的异常提示,心都要碎了。编程人员中流传着一句话,没有无异常的代码。虽然说得比较绝对,但是足以见到异常在代码开发过程中,异常,是多么得常见。

  当然,遇到问题去解决才是我们应有的态度,如果退缩了的话,就真的是“Java从入门到放弃”了。

  在Java中,异常是一种程序运行中产生的对象,它们也有各种类来加以区分,也有各自的属性行为。我们在控制台看到的红色字体的描述,就是异对象调用它自己的方法描述的它发生的位置,异常的类型。异常对象产生之后,需要抛出,才能够被java虚拟机所识别。这点尤其是在我们自定义异常的时候需要注意!

  异常传播机制:若程序运行过程中,某个被调用的方法产生了异常并且他自己没有处理,那么他将会将这个异常抛给调用它的方法,并跳出方法调用栈,如果调用它的方法还是没有处理,那么异常仍会继续抛出给调用它的方法,该方法也跳出方法调用栈,若一直到main方法还未解决,main方法会讲异常抛给java虚拟机,并跳出方法调用栈,java虚拟机没有解决异常的能力,程序结束运行。注意,方法跳出调用栈之前,若某些代码已经运行,那么该代码运行的结果不会消失。

  那么问题来了,若某一个方法有可能产生异常,我们如何处理?

  首先,我们要尽量避免异常的出现,比如在输入时,限制用户输入的范围,并且对所有可能的输入情况进行判断,对不同的输入情况进行处理等;

  其次,我们可以使用try-catch-finally代码块来处理异常,try{}所包含的代码即有可能出现异常的语句块,又称为受保护的代码,catch(){}中,圆括号为需要不捕获的异常类型名以及异常对象名,花括号中为我们的处理语句,若捕获了满足圆括号中的异常,无论花括号中有无额外代码,都将认为该异常已被解决,程序会继续运行,finally{}中为无论是否捕获异常都会强制执行的代码,若try{}块中有,break/return等,也会先执行finally中的语句才结束,即只要进入try代码块,若有finallly则其必将被执行。

  再者,只有让方法有可能产生异常,他自己不能够解决,那么它就抛出异常给调用者。但是任由方法运行时抛异常对于开发者而言往往是被动的,尤其是代码将可能被其他人阅读和改写的时候,他人很难考虑到所有可能跑一场的情况。这个时候,throws关键字出现了,它用在方法的申明中,在方法名以及其圆括号后加上throws关键字 再加上抛出的异常类型名,这样就完整地表示了一个方法可能抛出的异常。这种情况下,方调用者必须使用try-catch语句块来处理或者再次使用throws来申明抛出异常。以此类推。此处需要注意,调用者再申明的异常类型只能是被调用者抛出的相同异常类型或者其父类,否则编译将会报出错误。以上时编译期异常的申明方法,而对于运行期异常,若调用者没有再申明编译也不会出错,但是,作为开发人员,我们也应该加深个申明或者使用try-catch去处理。

  以上就是我对java中异常的认识,和处理方法,还有细节将在以后补充。