首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于JAVA局部变量的一个有关问题

2012-01-24 
关于JAVA局部变量的一个问题有如下代码Java codefor(int i0iframeCount i++){Frame frame frames.ge

关于JAVA局部变量的一个问题
有如下代码

Java code
for(int i=0;i<frameCount; i++){    Frame frame = frames.get(i);    ......}Frame frame = frames.get(0);......


这两个同名的frame对象,可以同时存在于一个方法中!

但反过来就不行!


Java code
Frame frame = frames.get(0);......for(int i=0;i<frameCount; i++){    Frame frame = frames.get(i);    ......}



谁给解释一下!


[解决办法]
生命周期不同的缘故,在上面的两个frame,前一个在for循环当中,跳出for循环第一个frame的引用就被销毁了,所以再声明一个frame没问题
在第二个例子当中,前一个frame在方法体中,其作用域包括for循环,在for循环内部同时又声明同名frame这样就会造成命名冲突,Java跟C C++不同,不允许这样的冲突存在,所以报编译错误

关键还是对象引用的生命周期和作用范围的缘故
[解决办法]
在Java语言中,即使作用域不同,其定义的变量名字也不能够相同。这主要是为了提高Java代码的可读性,防止混淆才定义了这条规则。

前面哪种情况定义第二个frame的时候,第一个frame的生命周期已经结束了,所以不存在重复定义的说法,而反过来就……
[解决办法]
第一段代码,Frame frame的作用域是for后面的花括号{},
当for循环结束时,frame的作用域也结束了,而后又声明了一个Frame frame 
与之前的frame是没有关系的。

第二段代码,Frame frame的作用域是涵盖整个for循环的方法体,而当程序
执行到for循环中时,再声明一个Frame frame就与外面的frame冲突了。
[解决办法]
上面的for循环结束后,循环里的frame仅在for循环里有效。

热点排行