`
messi_18
  • 浏览: 99161 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异常返回值反思

    博客分类:
  • java
 
阅读更多
昨天闲得无聊,忽然想起了曾经的一个疑虑:貌似有这样的线索:在catch语句里写return语句会不会真的返回,前提是有finally语句。
	int cal(){
		int ret = 1;
		try {ret=2;return ret;} catch(Exception e){ret=3;return ret;}
		finally {
			ret=4;
			return ret;
		}
	}

这段代码,有异常的时候会返回什么结果?
反编译一下:
int cal();
  Code:
   Stack=1, Locals=5, Args_size=1
   0:   iconst_1
   1:   istore_1
   2:   iconst_2
   3:   istore_1
   4:   iload_1
   5:   istore_2
   6:   iconst_4
   7:   istore_1
   8:   iload_1
   9:   ireturn
   10:  astore_2
   11:  iconst_3
   12:  istore_1
   13:  iload_1
   14:  istore_3
   15:  iconst_4
   16:  istore_1
   17:  iload_1
   18:  ireturn
   19:  astore  4
   21:  iconst_4
   22:  istore_1
   23:  iload_1
   24:  ireturn
  Exception table:
   from   to  target type
     2     6    10   Class java/lang/Exception

     2     6    19   any
    10    15    19   any
    19    21    19   any
  LineNumberTable:
   line 3: 0
   line 4: 2
   line 6: 6
   line 7: 8
   line 4: 10
   line 6: 15
   line 7: 17
   line 6: 19
   line 7: 23


从字节码看是4。try语句块中和catch中的return都不会真的返回。只有finally中的才算数。
分享到:
评论

相关推荐

    Python编程艺术

    文章强调了Python的异常处理机制,提倡遵循最小惊讶原则,即函数应保持返回值的可预见性。同时,也指出了一种常见的误区,即认为函数应当只返回一种类型的数据,但这并不意味着必须是同一种"类型"或基于同一"基类"的...

    Java语言程序设计(基础篇)习题答案

    在Java中,函数可以有返回值,也可以没有返回值,理解函数的参数传递机制和作用域规则至关重要。 4. **类和对象**:Java是一种面向对象的语言,类是创建对象的蓝图,对象则是类的实例。理解类的属性(成员变量)和...

    C++习题程序(谭浩强)

    《C++习题程序(谭浩强)》是基于谭浩强教授的C++教材配套的练习题目,这些习题旨在帮助学习者...在学习过程中,建议结合教材或网络资源,对每个习题进行深入理解和实践,不断反思和总结,这样才能真正提升编程技能。

    java基础程序30个 java文件压缩

    4. **函数(方法)**:掌握如何定义和调用函数,理解参数传递和返回值。 5. **类与对象**:理解面向对象编程的基础,如类的定义、对象的创建、封装、继承和多态性。 6. **构造器**:学习如何创建和使用构造器初始...

    网络攻防课程seed-labs实验-Buffer_Overflow_Server.zip

    3. **溢出重现**:通过编写特定的输入,尝试触发缓冲区溢出,观察程序的行为变化,如崩溃、异常返回值等。这一步可能需要反复调试和测试。 4. **漏洞利用**:一旦找到溢出点,下一步就是构造恶意输入,使得溢出后的...

    Python程序设计第五章编程题答案(浙江大学)

    第五章可能包括如何定义函数、传递参数、返回值以及使用内置函数如`range()`、`map()`和`filter()`等。 2. **模块导入**:Python的模块系统使得代码复用和组织变得简单。学生可能会遇到如何使用`import`语句导入...

    java一些经典小程序题目和面试题

    4. **方法**:掌握方法的定义、调用,参数传递,返回值类型以及重载的概念。 5. **数组**:理解一维、多维数组的创建、遍历和操作,包括数组拷贝、排序等。 二、面向对象 6. **类与对象**:理解类的定义,对象的...

    Python100-master 100道题

    在这100道题中,你将学习到函数的定义、参数传递、返回值,甚至包括高阶函数如map()、filter()和reduce()的使用。此外,函数式编程的概念也可能出现在其中,例如闭包和装饰器。 模块化编程是提高代码复用性和可维护...

    VS实验内容

    【VB程序设计基础】 Visual Basic(简称VB)是Microsoft公司推出的一种面向对象的、可视化集成开发环境,它在编程领域中具有广泛的应用。VB以其易学易用的特点,...在每个实验之后进行反思和总结,将使学习效果更佳。

    C#程序设计实验及实验报告

    - 学习如何定义和调用函数,理解参数传递和返回值的概念。 - 探究函数的重载,了解方法签名的重要性。 3. **实验3:类与对象** - 理解面向对象编程的核心概念,包括类的定义、对象的创建与销毁。 - 学习封装、...

    自考JAVA(一)实验大纲原代码

    8. **异常处理**:理解Java的异常体系,如何使用try-catch-finally块来捕获和处理异常。 9. **字符串处理**:Java中String类的使用,包括字符串的创建、比较、截取和拼接等操作。 10. **集合框架**:可能包括...

    c++ interview

    4. **指针与引用**:理解指针的基本操作,包括解引用、地址运算,以及引用作为函数参数和返回值的使用。 5. **内存管理**:熟悉new和delete操作符,了解动态内存分配和释放,避免内存泄漏。 ### 面向对象编程(OOP...

    c++小程序

    C++是一种广泛使用的高级编程语言,以其强大的性能、丰富的库支持和面向对象的特性而闻名...在解决这些问题的过程中,不断实践和反思是学习C++的关键,同时,查阅文档和参考书籍,参加编程社区讨论也是进步的有效途径。

    Java语言编程规范--华为技术有限公司

    3. 方法注释:解释方法的作用、参数和返回值。 4. 行内注释:简洁明了,避免过多的代码解释。 三、代码结构 1. 每个类只做一件事,遵循单一职责原则。 2. 尽量减少类的成员变量,优先考虑局部变量。 3. 避免过长的...

    python练习册代码

    "Python练习册代码"是一个专为学习Python编程者设计的资源集合,主要目的是通过一系列的实践...在学习过程中,不断实践和反思是提升的关键,因为正如其名"Show-Me-the-Code"所示,编写代码是掌握编程语言的最直接途径。

    个人实训资料笔记C++

    两者都是无返回值的,并且名称与类名相同。 【继承与多态】 继承是面向对象中的一个关键特性,允许一个类(子类)继承另一个类(父类)的属性和行为。这实现了代码的复用,子类可以添加新的功能或重写父类的方法。...

    java程序设计教程 第五版 答案

    4. **函数**:定义和调用函数,理解参数传递,以及函数返回值的概念。 5. **数组**:创建和操作一维、二维数组,理解数组的本质是内存中连续的数据存储。 6. **类与对象**:定义类,理解封装、继承和多态等面向对象...

    leedcode.zip

    4. 函数:理解函数的定义、参数传递、返回值等,掌握递归和高阶函数。 5. 异常处理:知道如何使用try-catch-finally进行异常处理,理解Checked和Unchecked异常的区别。 6. 集合框架:熟练使用ArrayList、LinkedList...

    python编程题67-72及参考代码

    函数的参数传递、返回值、局部和全局变量的理解也是考察的重点。 3. **控制流**:包括条件语句(if-else)和循环(for、while)的使用,可能需要你根据特定条件执行不同操作,或者遍历数据结构执行特定任务。 4. *...

    低级bug耗费12小时Fix

    5. **结果与反思**: - 经过上述修改,程序在4小时内的运行不再崩溃,但在遇到IO异常时未能正常响应。 - 进一步分析发现,这是由于`popen`打开文件失败导致循环中一直执行`continue`语句,从而使程序无法执行后续...

Global site tag (gtag.js) - Google Analytics