码迷,mamicode.com
首页 > 其他好文 > 详细

final、finalize、finally

时间:2015-03-01 21:03:05      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:final   finalize   finally   

final、finalize、finally
	final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
		说明:final 声明的成员变量,必须在声明的同时赋值。final 声明的局部变量和普通的局部变量一样,可以在声明的同时不赋初值,但是在使用前必须赋值。

	finalize 是Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

	finally:return、continue和break都不能阻止finally语句块的执行

		问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 
		答案:在return之前,但往更细地说,是在return中间执行(可以在return语句处设置断点实验)。

		eg1:
			代码:
			public class Test {
			
				public static void main(String[] args) {
					System.out.println(Test.test());
				}
				
				static int test() {
					int x = 1;
					try {
						return x;
					} finally {
						++x;
						System.out.println(x);
					}
				}
			}
			结果:
				2
				1
			分析:
				主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。
				所谓程序逻辑返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的!

		eg2: 
			代码:
			public final class FinallyTest {
				
				public static ReturnClass testReturn() {
					try {
						return new ReturnClass();
					} catch (Exception e) {
						e.printStackTrace();
					} finally {
						System.out.println("执行了finally语句");
					}
					return null;
				}

				public static void main(String[] args) {
					FinallyTest.testReturn();
				}
			}

			class ReturnClass {
				public ReturnClass() {
					System.out.println("执行了return语句");
				}
			}
			结果:
				执行了return语句
				执行了finally语句
			分析:
				从输出的结果来看,return语句似乎在finally语句块之前执行了,事实真的如此吗?
				我们来想想看,return语句的作用是什么呢?是退出当前的方法,并将值或对象返回。
				如果finally语句块是在return语句之后执行的,那么return语句被执行后就已经退出当前方法了,finally语句块又如何能被执行呢?
				
				因此,正确的执行顺序应该是这样的:

				编译器在编译return newReturnClass();时,将它分成了两个步骤,new ReturnClass()和return,
				前一个创建对象的语句是在finally语句块之前被执行的,而后一个return语句是在finally语句块之后执行的,也就是说finally语句块是在程序退出方法
				之前被执行的。
				同理,finally语句块是在循环被跳过(continue)和中断(break)之前被执行的。

final、finalize、finally

标签:final   finalize   finally   

原文地址:http://blog.csdn.net/wodewutai17quiet/article/details/44005365

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!