`
elite20130514
  • 浏览: 44944 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于异常返回值和递归的一点思考

阅读更多

1.异常返回值

我们知道异常的框架如:

try{
   //异常代码
}catch() {

}finally{
  
}

 代码是最好的说明:

public class ExpRetVal {

	public static int func() {
		try{
			throw new Exception(){};
		}catch(Exception e) {
			return 0;
		}finally {
			return 1;
		}
	}
	public static void main(String[] args) {
		System.out.println(func());
	}
}

 在catch中我捕获异常,返回0,然后我在finally我返回1,到底返回0还是1?返回值可以覆盖吗?

输出是1,很有意思,结论告诉我们返回值是可以覆盖的。

finally总是在return之前被执行,如果finally中返回值,就直接返回。

2.递归的一点点思考

有这样的情况,给出一个包名(例如org.ljh.reflect,此处给出包名org),我要遍历包下所有的.class文件,如果找到我就返回一个true,说明有这个类的字节码,然后我通过反射实例化这个类。凑合着看下伪代码:

	public boolean exist(String packageName) {
		if("在这个包找到了") {
			return true;
		}else{
			exist("当前包名");
		}
		return false;
	}

 结果不确定了,可能是true,也可能是false,这就是因为递归引起的覆盖,怎么解决,通过静态成员变量的方式(静态成员变量在类范围,不在对象范围,每个对象共享):

	static boolean isExist = false;
	
	public boolean exist(String packageName) {
		if("在这个包找到了") {
			isExist = true;
		}else{
			exist("当前包名");
		}
		return isExist;
	}

 

 初学者发帖,大牛勿喷,不足之处多多指正。

 

0
2
分享到:
评论
2 楼 elite20130514 2013-09-27  
孤独的CPU 写道
看了下楼主说的,基本上就是个 P。
首先,所谓的“返回值覆盖”。你说的第一段代码,应该是正常的语法特性。

其次,你写的那个地归方法简直就是一坨屎,你去仔细的看看地归的定义。
如果你那个是正确的,你让这个怎么办?
    public boolean exist(String packageName) { 
        if("在这个包找到了") { 
            return true; 
        }else{ 
            return exist("当前包名"); 
        } 
        return false; 
    } 
好了,喷你结束了。好好学学,要不就别写技术的了。

你好,谢谢你的评论,作为初学者我不怕犯错,不断积累错误才能在技术上有所进步,
第一,“返回值覆盖”,是正常的语法特性,我赞同,但是对于初学者很容易出错,我没有你积累的专业术语,不好意思。
第二,你上面这个exist(String packageName)是错的,是我用作反面案例的。
all in all,希望你继续监督,不足之处,请海涵。
1 楼 孤独的CPU 2013-09-27  
看了下楼主说的,基本上就是个 P。
首先,所谓的“返回值覆盖”。你说的第一段代码,应该是正常的语法特性。

其次,你写的那个地归方法简直就是一坨屎,你去仔细的看看地归的定义。
如果你那个是正确的,你让这个怎么办?
    public boolean exist(String packageName) { 
        if("在这个包找到了") { 
            return true; 
        }else{ 
            return exist("当前包名"); 
        } 
        return false; 
    } 
好了,喷你结束了。好好学学,要不就别写技术的了。

相关推荐

Global site tag (gtag.js) - Google Analytics