黑马程序员技术交流社区

标题: 关于 局部 变量的作用范围 [打印本页]

作者: 张帅    时间: 2012-2-6 23:40
标题: 关于 局部 变量的作用范围
本帖最后由 张帅 于 2012-2-7 15:11 编辑

我的问题是,我有两个同名的value变量,但是i其中一个是局部的,在for里,为什么会提示?
  1. import java.util.*;
  2. class Demo{
  3.         public static void main(String args[]) throws Exception{
  4.                 Properties prop = System.getProperties();
  5.                 //因为Properties是Hashtable的子类,也就是Map集合的一个类的对象。
  6.                 //那么可以通过Map的方法获取出该集合中的元素。
  7.                 //该集合中存储都是字符串,没有泛型定义
  8.                
  9.                 //如何在系统中自定义一些特有信息呢?
  10.                 System.setProperty("mykey","myvalue");
  11.                
  12.                 //获取指定属性信息
  13.                 String value = System.getProperty("os.name");
  14.                 System.out.println("value="+value);
  15.                 //获取所有属性信息。
  16.                 for(Object obj : prop.keySet()){
  17.                         String value = (String)prop.get(obj);
  18.                         System.out.println(obj+"::"+value);
  19.                 }
  20.         }
  21. }
复制代码
Demo.java:17: 已在 main(java.lang.String[]) 中定义 value
                        String value = (String)prop.get(obj);
                               ^
1 错误
作者: 陈时峰    时间: 2012-2-6 23:49
第一个String value = System.getProperty("os.name");是main方法的局部变量
作用范围是整个main方法,而String value =  (String)prop.get(obj);是for循环
里的,作用范围只限for循环中,所以会报错,但是若果把
String value = System.getProperty("os.name");放在for循环后面就没问题。
简单点说就是出了大括号就没作用了




作者: Joyuang    时间: 2012-2-6 23:52
1,局部变量:定义在函数中,或者语句内。
1,这两个value都是局部变量,因为都定义在主函数里。
2,这两个value因为都是局部变量,所以被重复定义了。
作者: 王文龙    时间: 2012-2-6 23:56
我认为:
两个都在局部位置上,
同属局部变量,
应该不能重名吧.
作者: 张帅    时间: 2012-2-6 23:56
陈时峰 发表于 2012-2-6 23:49
第一个String value = System.getProperty("os.name");是main方法的局部变量
作用范围是整个main方法,而St ...

感觉在for里,就和外面的不冲突了
作者: 张帅    时间: 2012-2-6 23:57
王文龙 发表于 2012-2-6 23:56
我认为:
两个都在局部位置上,
同属局部变量,

第二个不是在for的范围内吗?怎么跟外边还有联系?
作者: 秦碧    时间: 2012-2-7 00:10
张帅 发表于 2012-2-6 23:57
第二个不是在for的范围内吗?怎么跟外边还有联系?

main也是Demo类中的一个函数
所以两个value都是局部变量
一个函数中不可以定义两个同名的局部变量
作者: 张帅    时间: 2012-2-7 00:34
秦碧 发表于 2012-2-7 00:10
main也是Demo类中的一个函数
所以两个value都是局部变量
一个函数中不可以定义两个同名的局部变量 ...

我知道了,我是在这里迷糊了,这个是对的吧
比如
int i= 0
for(int i =0;;){

}
作者: 王_涛    时间: 2012-2-7 14:16
1.这两个都是局部变量

2.第一个局部变量的范围在main方法中包含for循环,

3.两个局部变量存在交集是问题发生的根本所在




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2