1、finally块中的代码什么时候被执行
(1)在java语言的异常处理中,finally块的作用就是为了保证无论出现什么情况,finally块理的代码都是一定会被执行的。
(2)如果try-finally和catch-finally中都有return,那么finally块中的return语句将会覆盖别处发return语句,最终返回到调用者那里的是finally中的return的值。
(3)由于一个方法内部定义的变量都存储在栈中,当这个函数结束后,其对应的栈就会被回收,此时在其方法体中定义的变量将不存在了,因此return返回时不是直接返回变量的值,而是复制一份,然后在返回。
(4)对于基本类型的书,在finally块中改变return的值对返回值没有任何影响,而对应用类型的数据会有影响。
(5)程序在执行到return语句时会首先将返回值存储在一个指定的位置,其次去执行finally块,最后再返回。
2、 情况不需要执行finally块中的代码;
(1)、当程序在进入try语句块之前就出席那异常时,会直接结束,不会执行finally块中的代码。
(2)、当程序在try块中强制退出时,也不会去执行finally块中的代码。
3、异常的分类
(1)、异常是指:程序在运行时所发生的非正常情况或者错误,当程序违反了语义的规则时,Java虚拟机就会将出现的错误表示为一个异常抛出。(异常包括:程序执行的过程中遇到的事先没有预料到的情况)
(2)、异常的目的:主要是想提高程序的安全性和鲁棒性。
(3)、程序出现异常时,可以使throw抛出的有:Error、Throwable、Exception、RuntimeException
(4)、异常分为:错误(error)和异常(exception)
1)、错误(error)
Error表示程序运行的时候出现的错误,并且该错误是不可恢复的,一般error是属于error层的错误,并且会导致程序终止。如:ThreadDeath
2)、异常(exception)
a、Exception表示的是可恢复的异常,java编辑器一本都是可以捕捉到的。
b、exception(异常)分为两种:检查异常和运行时异常
(a)、检查异常:
检查异常时程序中最经常遇见的异常;例如:IO异常和SQL异常,这些异常一般都会发生在编译阶段,并且java编译器会强制程序捕捉这种类型的异常,即把可能出现的异常会放到try-catch代码块中去进行处理。(try块中存放异常的代码;catch块中存放的是处理异常的代码。)
(b)、运行时异常:
运行时异常,编译器不会强制对其进行处理。一般是由JVM进行处理的。如:空指针异常、数组越界异常、缓冲区溢出异常等;
当程序中出现运行时异常时,系统会把异常一直往上层抛出异常,直到有吹异常的代码位为止。
(1)、如果是多线程就是Thead.run()方法抛出异常。
(2)、如果是单线程,就用main()方法抛出异常。这个线程就会退出,或者整个程序就会退出。
所以如果不对运行时的异常进行处理,后果是非常严重的,一旦发生,要么线程终止,要么是主线程终止。
在进行异常捕获时,先捕获子类,在捕获父类的异常信息。