幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: august

[java]返回问题

[复制链接]

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2007-9-16 14:20:28 | 显示全部楼层
引用第9楼lw于2007-09-16 12:31发表的  :
RETURN部分没有压栈操作,只是根据栈内的第一个数据进行返回(跳转到XX地址),另外返回值也是进入之前就协定好了(VC通常是EBP的下一个参数+4),那么如果真的没有任何对返回值有操作,那么就是原来进入的时候的返回值,在VC编译器DEBUG情况通常会得到类似于0XCCCCCCCC的错误值可以立即发生问题(除非纯粹看看……),返回结构通常会被转化,本质上就是返回一个VOID了,结构另外方式存放——

[硬件特性] 偶则不懂什么意思? [s:3]
类似于VB这类会默认把数值设置为0,有时候是不错,但是会培养不初始化的坏习惯,特别是间隔比较长时候修复的时候会很难抓虫子,个人理解以上。。。

呃,返回值是通过EAX传递的,不是栈,栈上只有返回地址。返回值只是在返回前设置EAX的值,没有就不设。

M所指的硬件特性是指编译出来的机器码的行为,我觉得叫“平台特性”会好点。例如访问了不能访问的内存程序就崩溃,从返回void的函数那里取返回值(通过指针间接调用等方法)会得到一个未定义的值(其实就是函数退出时EAX的值)。

我觉得理论上Java也是可能会有编译器捕捉不了的错误,这些错误最终会通过Java的VM反映出来。
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-9-22 11:13:24 | 显示全部楼层
引用第10楼john_he于2007-09-16 14:20发表的  :
我觉得理论上Java也是可能会有编译器捕捉不了的错误,这些错误最终会通过Java的VM反映出来。
编译时无法捕获的错误就是运行时错误...一般会造成RuntimeException的抛出,那些都是unchecked exception来的.

话说Java在方法返回时确实需要把返回值压到栈上.这是因为JVM的指令集是stack-based instruction set,而不是类似x86体系的register-based instruction set.不过压栈的行为并不是return做的就是了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-11-1 08:10 , Processed in 0.053880 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表