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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 次长风 中级黑马   /  2013-12-19 22:24  /  1141 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test4 {
public static void main(String[] args) {

  for ( int x = 10;x < 20 ;x++ ) {
   System.out.println(x);
  }
  System.out.println(x);
}
}
这样编译不能通过,但是如果把int x = 10 放到for语句外边就能编译通过,为什么呢?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

12 个回复

倒序浏览
你的x是在for语句中声明的,是局部变量,它的生命周期只在for语句内有效,你的第二个输出语句是在for语句外的,所以编译不能通过。当你把int x = 10的声明放在for语句外,它的有效范围就是在main函数内了,这样第二个输出语句就能访问到了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
  1. class Test4 {
  2. public static void main(String[] args) {

  3.    for ( int x = 10;x < 20 ;x++ )//这里的X只在for循环中有效
  4. {
  5.     System.out.println(x);
  6.    }
  7.    System.out.println(x);//访问不到for里面的x。所以会编译失败
  8. }
  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
张利星 发表于 2013-12-19 22:30
你的x是在for语句中声明的,是局部变量,它的生命周期只在for语句内有效,你的第二个输出语句是在for语句外 ...

按你说的x是在for语句内有效,将把int x =10放到外边,结果他不应该打印出来10吗,但是最后结果却是20
回复 使用道具 举报
次长风 发表于 2013-12-19 22:47
按你说的x是在for语句内有效,将把int x =10放到外边,结果他不应该打印出来10吗,但是最后结果却是20 ...

当我把X提到外面的时候是这样的
  1. class Test4 {
  2. public static void main(String[] args)
  3. {
  4. int x = 10 ;//当x=10时
  5.    for ( ;x < 20 ;x++ )//条件满足。x<20,然后打印x,再自增,直到x=20时,条件不满足,循环结束。
  6. {
  7.     System.out.println(x);
  8.    }
  9.    System.out.println(x);//然后打印这个x=20.
  10. }
  11. }
复制代码
回复 使用道具 举报
for循环里对x运算,就好比
x = 10;
x = x + 10;
syso(x);
当然是20。
回复 使用道具 举报
  1. int x = 10;
  2.                 System.out.println(x);//结果是10
  3.                 for(x = 10; x < 20; x ++){}//只要顺利运行到下面,不管for循环里面进行了什么,对x的影响就相当于对x加了10
  4.                 System.out.println(x);//结果是20
复制代码
回复 使用道具 举报
  1. int x = 10;
  2. System.out.println(x);//结果是10
  3. for(x = 10; x < 20; x ++){}//只要顺利运行到下面,对x的影响就相当于对x加了10
  4. System.out.println(x);//结果是20
复制代码
回复 使用道具 举报
次长风 发表于 2013-12-19 22:47
按你说的x是在for语句内有效,将把int x =10放到外边,结果他不应该打印出来10吗,但是最后结果却是20 ...

当然应该打印20呀!怎么能是10呢?不晓得你是怎么理解的,我再解释一遍吧:当把int x =10放到外边时,经过for循环当x的值变成了20(因为不满足x<20的条件而跳出for循环),接下来再打印x,不就应该是20
回复 使用道具 举报
这个很简单啊,在for语句中定义的x,只能在for语句中引用,第二句输出语句在for外面,引用了for里面的变量,导致出错。
回复 使用道具 举报
class Test4 {
public static void main(String[] args) {

for (int x = 10; x < 20; x++) {
System.out.println(x);//这里的x是局部变量,出了FOR循环,这个x就消失了。
}
System.out.println(x);//这里的x是成员变量,而你的类里面没有定义这个变量,所以会出错。
}
}

程序不执行是因为你打印了一个没有定义的变量。
for循环定义的x变量,只有在for循环内部可以使用。叫做局部变量。
而你最后打印的那个x是所属于类的成员变量。这个变量,你并没有定义。
也就是说你打印了一个没有定义的变量,所以程序出错。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
for循环里的x是局部变量,在执行完for语句后,内存中的x变量就会消除,第二句System.out.println(x)定义的是成员变量,在main方法中没有定义,所以不会编译成功。
回复 使用道具 举报
这就是局部变量的使用范围问题了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马