`

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

阅读更多

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; 
    } 
好了,喷你结束了。好好学学,要不就别写技术的了。

相关推荐

    像计算机科学家一样思考Python - 20131

    此外,递归是解决某些问题的强大工具,但过度递归可能导致程序崩溃,因此理解和掌握递归的正确使用至关重要。 书中通过案例研究介绍了接口设计,如乌龟绘图系统,展示了如何通过封装和泛化来创建灵活的程序。条件和...

    《think python》PDF

    此外,书中还深入讲解了函数的定义与调用,包括参数传递、返回值和递归。 接着,书中的章节涵盖了更高级的主题,如列表、元组、字典和集合等复合数据结构,以及文件操作,这在实际编程中非常实用。函数式编程的概念...

    <>练习分析与解答

    《探秘Java》这本书是为初学者和有一定基础的Java程序员设计的一本指南,它旨在帮助读者理解Java编程语言的核心概念,并学会如何像计算机科学家一样思考问题。书中的练习分析与解答部分是学习过程中的重要辅助,通过...

    C++习题讲解

    C++是一种广泛应用于系统软件、应用软件、游戏开发、嵌入式系统等领域的高级编程语言。...在学习过程中,不断练习和思考是进步的关键,同时,理解和掌握C++的思维方式将对整个计算机科学的学习产生深远影响。

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    13.3 按递归方式思考问题 397 13.3.1 递归设计技术 397 13.3.2 二分查找 398 13.3.3 编码 400 13.3.4 检查递归的正确性 402 13.3.5 效率 402 第14章 继承 410 14.1 继承基础 410 14.1.1 派生类 410 14.1.2...

    汉诺塔游戏

    9. **代码优化**:思考如何优化代码结构,使其更加简洁和易于理解,例如使用枚举类型表示柱子,或者使用迭代而非递归实现。 10. **文档注释**:为代码添加适当的注释,解释各个部分的功能,便于他人阅读和理解。 ...

    像计算机专家一样思考(清晰版)

    通过对各种基本概念的深入解析,以及丰富的实例演示,读者能够逐步建立起扎实的编程基础,掌握有效的调试技巧,学会运用函数、条件语句和递归等高级特性来构建更加复杂和高效的程序。无论是对于初学者还是有一定经验...

    Think Java How to think like a computer scientist.pdf

    《Think Java:如何像计算机科学家一样思考》是一本旨在引导初学者深入理解编程思维和Java语言的书籍。这本书的核心理念是让读者不仅学习编程语法,更着重于培养问题解决能力和逻辑思维能力。以下是对该书内容的详细...

    经典编程900例(C语言)

    通过分析不同函数的实现,可以学习到参数传递、函数返回值、递归函数等概念。 4. **数组与字符串**:C语言中的数组用于存储同类型数据的集合,而字符串是字符数组的特殊形式。实例可以帮助你理解数组的动态分配、...

    think python

    3. **函数和模块**:学习如何定义和调用函数,理解函数参数和返回值,以及如何组织代码为模块,提高代码复用性。 4. **数据结构**:深入理解列表、元组、字典和集合等内置数据结构,学习如何有效地存储和操作数据。...

    Thinking.In.Java.3rd.Edition.Chinese

    读者将学习如何编写函数,理解函数参数和返回值,以及函数重载和递归的概念。书中还详尽讨论了类和对象,这是面向对象编程的基础,涵盖了封装、继承和多态性等核心概念。 接着,书中深入到集合框架,讲解ArrayList...

    How to design programs 2ed.zip

    6. **错误处理**:书中介绍了错误处理的策略,包括异常处理和返回值表示错误,帮助读者编写健壮的程序。 7. **测试驱动开发**:TDD(Test-Driven Development)是一种常见的软件开发实践,书中将教授如何编写测试...

    How to Think Like a Computer Scientist - Learning with Python 3 documentation

    - **递归算法**: 更深入地探讨递归的应用场景和技巧。 ### 附录D: 面向对象编程 - **设计模式**: 探讨面向对象设计中的常见模式。 - **高级特性**: 如多态、抽象基类等。 ### 附录E: 异常处理 - **高级异常处理*...

    C语言程序 100实例集.rar

    - 内联函数与递归函数:学习内联函数的优化效果,以及递归函数的实现和应用。 3. **数组与指针** - 一维数组:学习如何声明、初始化和操作一维数组。 - 多维数组:理解二维数组的使用,以及在矩阵运算中的应用。...

    Thinking in Java 3rd Edition

    4. **函数与方法**:讲解了函数的定义、参数传递、返回值、重载以及递归。此外,还介绍了Java中的静态方法和非静态方法的区别。 5. **异常处理**:介绍了Java的异常处理机制,包括try-catch-finally语句块,异常类...

    经典c语言源码

    10. **错误处理**:C语言没有内置的异常处理机制,但可以通过错误码和return值来处理错误。源码可能展示了如何在程序中处理错误。 11. **位运算**:C语言支持位运算,如位移、按位与、按位或、按位异或等,这些运算...

    C++复习题及答案期末备考复习之用

    2. **函数**:理解函数的定义、参数传递和返回值,包括重载函数和递归函数的概念。同时,掌握主函数main()的作用以及如何调用标准库中的函数。 3. **数组与指针**:深入理解数组的概念,包括一维、二维数组的声明、...

    Building Java Programs A Back to Basics Approach (2nd Edition) .pdf 下载.rar

    5. **函数(Methods)**:学习如何定义和调用函数,理解参数传递和返回值的概念,以及函数的重载和递归。 6. **数组**:了解一维和多维数组的创建、初始化和操作,以及遍历数组的方法。 7. **类和对象**:深入理解...

    SSD3 exercise8 答案 JAVA 自己做的

    【SSD3 Exercise 8 知识点详解】 在编程领域,SSD3(Software Systems Development 3)可能指的是一个课程...同时,对于网上找到的资源,应谨慎参考并理解其工作原理,避免盲目复制,以培养独立思考和解决问题的能力。

    Think Python-英文原版-高清

    函数是代码重用的关键,作者会讲解如何定义和调用函数,以及如何使用参数和返回值。模块化编程也是Python的一大特色,通过导入和创建模块,可以更好地组织和管理代码。 在面向对象编程部分,读者将了解到类(class...

Global site tag (gtag.js) - Google Analytics