锁定老帖子 主题:finally 浅谈
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-29
楼上的类名起得比较好!!!
|
|
返回顶楼 | |
发表时间:2010-07-29
不知道楼主想说明什么问题
|
|
返回顶楼 | |
发表时间:2010-07-30
最后修改:2010-07-30
fyf_008 写道 楼主回答有些许问题。。
对象绝对没有 Copy. 或者说是克隆。你要用Java,就要知道Java的设计者如何设计java .这问题就解决 那为什么呢, return obj; 只是 将返回引用(returnPointer),指向了obj 这个引用 指向的对象, 并没有Copy, 虽然,你在 finally 里面,把obj=null; 那只是, obj 这个引用,指向发生了变化,没有影响返回引用(returnPointer) 理解的很深刻~~很不错 我要多多向这位仁兄学习~ |
|
返回顶楼 | |
发表时间:2010-07-30
yangguo 写道 public class FinallyTest { public static void main(String args[]) { System.out.println("return: " + new FinallyTest().getString()); } public String getString() { String returnString = null; try { returnString = "this string will be return."; return returnString; }finally { System.out.println("execute finally..."); System.out.println("before clean returnString's value: " + returnString); returnString = null; System.out.println("after clean returnString's value: " + returnString); System.out.println("execute finally end."); } } } 以上一段相当于以下,所以根本没有错。就喜欢简单问题复杂化。 public class FinallyTest { public static void main(String args[]) { System.out.println("return: " + new FinallyTest().getString()); } public String getString() { String returnString = null; try { returnString = "this string will be return."; System.out.println("execute finally..."); System.out.println("before clean returnString's value: " + returnString); returnString = null; System.out.println("after clean returnString's value: " + returnString); System.out.println("execute finally end."); return returnString; }finally { } } } 真的是相当吗?我觉得应该不是相当的, 按照“先返回再执行finally”的方式来整理代码思路,LZ提出的两个例子都可以预期到执行结果 |
|
返回顶楼 | |
发表时间:2010-07-30
最后修改:2010-07-30
wujiazhao88 写道 楼主你试下这个程序看看,看看能不能猜到运行结果。
public class Danteng{ public static void main(String[] args){ doSomething(); } static void doSomething(){ try{ System.out.println("try..."); doSomething(); }finally{ System.out.println("finally"); doSomething(); } } } 有点邪恶 |
|
返回顶楼 | |
发表时间:2010-07-30
finally 只知道是一定要跑,不管啥情况
|
|
返回顶楼 | |
发表时间:2010-07-30
fyf_008 写道 楼主回答有些许问题。。
对象绝对没有 Copy. 或者说是克隆。你要用Java,就要知道Java的设计者如何设计java .这问题就解决 那为什么呢, return obj; 只是 将返回引用(returnPointer),指向了obj 这个引用 指向的对象, 并没有Copy, 虽然,你在 finally 里面,把obj=null; 那只是, obj 这个引用,指向发生了变化,没有影响返回引用(returnPointer) 这个就是指针的概念了 |
|
返回顶楼 | |
发表时间:2010-07-30
wujiazhao88 写道 楼主你试下这个程序看看,看看能不能猜到运行结果。
public class Danteng{ public static void main(String[] args){ doSomething(); } static void doSomething(){ try{ System.out.println("try..."); doSomething(); }finally{ System.out.println("finally"); doSomething(); } } } 为什么这种情况也执行"finally"? 没想明白…… |
|
返回顶楼 | |
发表时间:2010-07-30
hardPass 写道 wujiazhao88 写道 楼主你试下这个程序看看,看看能不能猜到运行结果。
public class Danteng{ public static void main(String[] args){ doSomething(); } static void doSomething(){ try{ System.out.println("try..."); doSomething(); }finally{ System.out.println("finally"); doSomething(); } } } 为什么这种情况也执行"finally"? 没想明白…… 为什么不执行呢? |
|
返回顶楼 | |
发表时间:2010-07-30
支持 返回引用(returnPointer) 的说法,还有对于先return后finally的说法
是不是这样的 returnPointer=obj; 之后执行fianlly; 然后 return returnPointer; |
|
返回顶楼 | |