Skip to content

Commit 4a5141f

Browse files
committed
[Conclusion]
1.Add the conclusion about exception and finally.
1 parent ab91ec0 commit 4a5141f

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

Algorithm(4th_Edition)/JavaConclusion.txt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,32 @@ Exception :表示可恢复的例外,这是可捕捉到的。
77
Java 提供了两类主要的异常 :runtime exception 和 checked exception 。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。
88
但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
99

10-
---------------------------------Throw and throws--------------------------------------------
10+
---------------------------------Exception-----------------------------------------------------------
11+
*****************Throw and Throws*************************************
1112
Throw:程序员自己抛出异常的语句:
1213
throw new RuntimeException();
1314
Throws:声明方法需要抛出异常的定义:
1415
public void test() throws Exception{
1516
}
16-
17-
---------------------------------Proxy--------------------------------------------
17+
*****************Exception********************************************
18+
Throwable
19+
/ \
20+
Error Exception
21+
/ \
22+
checked Runtime
23+
1.Error 和 Exception 都继承自Throwable类,都可以通过throw语句向上抛出。
24+
2.我个人认为,异常分为两类,可预计的和不可预计的两种,我将不可预计的异常统称为RuntimeException。所有RuntimeException均被认为是程序员自己造成的异常,可以通过统一异常处理。
25+
3.什么时候处理异常,什么时候抛出异常:
26+
1.处理当前可以解决的异常。
27+
2.抛出无法解决的异常。
28+
4.finally:
29+
1.finally语句不一定会执行到,有两种情况:
30+
->try语句没有执行到,在之前程序就返回了。
31+
->在try中出现了System.exit(0),这样虚拟机就被关闭了,finally也不会被执行。
32+
2.当try和catch中有return时,finally仍然会执行;
33+
3.finally是在return语句执行之后,返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前就已经确定了;
34+
4.finally中如果包含return,那么程序将在这里返回,而不是try或catch中的return返回,返回值就不是try或catch中保存的返回值了。
35+
---------------------------------Proxy---------------------------------------------------------------
1836
代理是一种面向切面编程的实现AOP,我们可以通过代理对方法进行增强。分为静态代理和动态代理,而动态代理又分为API(java.lang.reflect)中的Proxy和Cglib,后两种用于Spring。
1937
1.静态代理:
2038
静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类.

0 commit comments

Comments
 (0)