黑马程序员技术交流社区

标题: 变量的声明位置问题 [打印本页]

作者: 二月的雨    时间: 2014-12-5 05:13
标题: 变量的声明位置问题
有以下一个很基本的代码,变量max所处的位置不一样,eclipse中有一个会报错,这是为什么呢?
public class ArrayLearning
{
public static void main(String[] args)
{
  double[] myList = new double[10];  
  double max = 0;
  for(int i=0; i<myList.length; i++)
  {
   myList[i] = Math.random()*10;//随机获取10个初始化的值
   System.out.println(myList[i]+" ");//打印这10个值
//  double max = 0; //注意:若是变量放在这个地方声明及初始化,在for循环外会有注释里面的错误
   if(myList[i] > max)
   max = myList[i];
  }
  System.out.println("The max number is: "+max); //max cannot be resolved to a variable
}
}


作者: 二月的雨    时间: 2014-12-5 05:24
这个与C语言中的局部变量与全局变量,有关系吗?
作者: 清诗纪事    时间: 2014-12-5 07:14
你在for循环里边声明是局部变量,只在for循环之内有效,输出是在循环结束之后,肯定会变量没有声明的错误
把变量在for循环之外声明就没问题了,作为全局变量,在整个函数中都可以使用
作者: HelloWorld!    时间: 2014-12-5 09:41
变量是有自己的作用范围的。成员变量:定义在类内部,方法体或语句块外部,作用在整个类。局部变量:定义在方法体或语句块内部,作用在方法体或语句块内,方法体或语句块执行完就消失了,外部无法访问到。
作者: lwh316658735    时间: 2014-12-5 11:45
本帖最后由 lwh316658735 于 2014-12-5 11:50 编辑

两变量重名了,会报错!
两个max都在main方法里,方法里的叫局部变量,在方法被加载时一起在栈空间,栈空间就会出现max变量,而max的生命周期是在该方法运行完后消失,但是方法并没有运行完在for循环中又像栈中开辟max变量空间,所以重复了。





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