A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 没落NOKIA 中级黑马   /  2015-1-9 21:56  /  1555 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

省略很多
main()
{
         int a=1,b=2;
         mn(a,b);
}
省略很多了,main方法中调用本类的mn方法,为什么mn方法可以访问main方法中定义的变量,能不能结合方法区,方法栈详细解释一下

10 个回复

倒序浏览
不是访问 而是你把值传过去了
回复 使用道具 举报
郑豪 发表于 2015-1-9 22:18
不是访问 而是你把值传过去了

即使是值传递也还是用到了main方法中定义的变量啊,我的意思是说,为什么mn()方法能够使用main方法定义的变量,它俩在内存中不是不在一块吗?怎么就可以?
回复 使用道具 举报
你的mn(a,b);方法必须创建调用它的对象啊,你自定义的变量和创建对象调用的方法都在局部,当然可以访问了
回复 使用道具 举报
我记得这个涉及到栈内存的知识,两个方法是分开存放的,既然是分开存放的怎么又可以用了呢?
回复 使用道具 举报
没落NOKIA 发表于 2015-1-11 14:14
我记得这个涉及到栈内存的知识,两个方法是分开存放的,既然是分开存放的怎么又可以用了呢? ...

是分开存放的。
当为mn函数开辟一个新栈的时候,同时将a和b的值(不是变量,在这里就是1和2)传了进去。mn并没有访问a和b。
回复 使用道具 举报
biweibiren 发表于 2015-1-11 22:08
是分开存放的。
当为mn函数开辟一个新栈的时候,同时将a和b的值(不是变量,在这里就是1和2)传了进去。m ...

那不还是从a和b得到的1,2这两个值吗?变量a和b的值传给了mn()方法的形式参数,我不明白的是为什么mn()为什么能从main()方法的方法栈得到1、2这两个值?
回复 使用道具 举报
其实是main调用mn方法,main中的变量还是在它的范围内,它是在他范围内用,只把值传递给函数,不要想太多
回复 使用道具 举报
hmyf150122 发表于 2015-1-12 22:55
其实是main调用mn方法,main中的变量还是在它的范围内,它是在他范围内用,只把值传递给函数,不要想太多 ...

就是有些特别想知道的感觉
回复 使用道具 举报
有没有高人指点啊?
回复 使用道具 举报
a,b是mn函数的参数,                    
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马