黑马程序员技术交流社区
标题: 这是我看基础视频偶然发现的问题 [打印本页]
作者: 次长风 时间: 2013-12-19 22:24
标题: 这是我看基础视频偶然发现的问题
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语句外边就能编译通过,为什么呢?
作者: 张利星 时间: 2013-12-19 22:30
你的x是在for语句中声明的,是局部变量,它的生命周期只在for语句内有效,你的第二个输出语句是在for语句外的,所以编译不能通过。当你把int x = 10的声明放在for语句外,它的有效范围就是在main函数内了,这样第二个输出语句就能访问到了
作者: 伍艳雄 时间: 2013-12-19 22:36
- class Test4 {
- public static void main(String[] args) {
- for ( int x = 10;x < 20 ;x++ )//这里的X只在for循环中有效
- {
- System.out.println(x);
- }
- System.out.println(x);//访问不到for里面的x。所以会编译失败
- }
- }
复制代码
作者: 次长风 时间: 2013-12-19 22:47
按你说的x是在for语句内有效,将把int x =10放到外边,结果他不应该打印出来10吗,但是最后结果却是20
作者: 伍艳雄 时间: 2013-12-19 22:57
当我把X提到外面的时候是这样的
- class Test4 {
- public static void main(String[] args)
- {
- int x = 10 ;//当x=10时
- for ( ;x < 20 ;x++ )//条件满足。x<20,然后打印x,再自增,直到x=20时,条件不满足,循环结束。
- {
- System.out.println(x);
- }
- System.out.println(x);//然后打印这个x=20.
- }
- }
复制代码
作者: 夏德宇 时间: 2013-12-19 22:59
for循环里对x运算,就好比
x = 10;
x = x + 10;
syso(x);
当然是20。
作者: 夏德宇 时间: 2013-12-19 23:05
- int x = 10;
- System.out.println(x);//结果是10
- for(x = 10; x < 20; x ++){}//只要顺利运行到下面,不管for循环里面进行了什么,对x的影响就相当于对x加了10
- System.out.println(x);//结果是20
复制代码
作者: 夏德宇 时间: 2013-12-19 23:06
- int x = 10;
- System.out.println(x);//结果是10
- for(x = 10; x < 20; x ++){}//只要顺利运行到下面,对x的影响就相当于对x加了10
- System.out.println(x);//结果是20
复制代码
作者: 张利星 时间: 2013-12-19 23:16
当然应该打印20呀!怎么能是10呢?不晓得你是怎么理解的,我再解释一遍吧:当把int x =10放到外边时,经过for循环当x的值变成了20(因为不满足x<20的条件而跳出for循环),接下来再打印x,不就应该是20
作者: 任亚俊 时间: 2013-12-19 23:27
这个很简单啊,在for语句中定义的x,只能在for语句中引用,第二句输出语句在for外面,引用了for里面的变量,导致出错。
作者: 城市儒侠 时间: 2013-12-19 23:50
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是所属于类的成员变量。这个变量,你并没有定义。
也就是说你打印了一个没有定义的变量,所以程序出错。
作者: 恨死我了 时间: 2013-12-20 09:12
for循环里的x是局部变量,在执行完for语句后,内存中的x变量就会消除,第二句System.out.println(x)定义的是成员变量,在main方法中没有定义,所以不会编译成功。
作者: 张天昊76 时间: 2013-12-20 10:30
这就是局部变量的使用范围问题了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |