论坛首页 Java企业应用论坛

finally 浅谈

浏览 9907 次
锁定老帖子 主题:finally 浅谈
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-07-29  
楼上的类名起得比较好!!!
0 请登录后投票
   发表时间:2010-07-29  
不知道楼主想说明什么问题
0 请登录后投票
   发表时间:2010-07-30   最后修改:2010-07-30
fyf_008 写道
楼主回答有些许问题。。

对象绝对没有 Copy. 或者说是克隆。你要用Java,就要知道Java的设计者如何设计java .这问题就解决



那为什么呢,

return obj;

只是 将返回引用(returnPointer),指向了obj 这个引用 指向的对象,

并没有Copy,

虽然,你在 finally 里面,把obj=null;
那只是, obj 这个引用,指向发生了变化,没有影响返回引用(returnPointer)



理解的很深刻~~很不错 我要多多向这位仁兄学习~
0 请登录后投票
   发表时间: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提出的两个例子都可以预期到执行结果
0 请登录后投票
   发表时间: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();
}
}

}




有点邪恶
0 请登录后投票
   发表时间:2010-07-30  
finally 只知道是一定要跑,不管啥情况
0 请登录后投票
   发表时间:2010-07-30  
fyf_008 写道
楼主回答有些许问题。。

对象绝对没有 Copy. 或者说是克隆。你要用Java,就要知道Java的设计者如何设计java .这问题就解决



那为什么呢,

return obj;

只是 将返回引用(returnPointer),指向了obj 这个引用 指向的对象,

并没有Copy,

虽然,你在 finally 里面,把obj=null;
那只是, obj 这个引用,指向发生了变化,没有影响返回引用(returnPointer)




这个就是指针的概念了
0 请登录后投票
   发表时间: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"?
没想明白……
0 请登录后投票
   发表时间: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"?
没想明白……

为什么不执行呢?
0 请登录后投票
   发表时间:2010-07-30  
支持 返回引用(returnPointer) 的说法,还有对于先return后finally的说法
是不是这样的
returnPointer=obj;
  之后执行fianlly;
然后 return  returnPointer;
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics