黑马程序员技术交流社区

标题: 来来看看这个语句有什么问题? [打印本页]

作者: 打发士大夫    时间: 2015-8-25 19:13
标题: 来来看看这个语句有什么问题?
int b  ;
        for (int a =1;a < 6 ;a++ ) {
                for (b = 1;b < 8 ;b++ ) {
                        System.out.print("*");
                }
                System.out.println();       
        }
                System.out.println("b="+b);


作者: 打发士大夫    时间: 2015-8-25 19:15
有知道的同学吗
作者: 不想睡    时间: 2015-8-25 19:18
int b 没有初始化值
作者: Five_伍    时间: 2015-8-25 19:18
作用域问题,输出的b没有定义,循环中的b作用域不能到达循环外,。
作者: Five_伍    时间: 2015-8-25 19:20
b没有初始化,。
作者: 至尊幽蓝    时间: 2015-8-25 19:38
局部变量可以不初始化,但必须在调用时有值。
你这段代码给b赋值是在一级for循环的内部,假如一级for循环在第一次判断条件时就为假,内部循环也就没有执行的机会,b就未赋值,那么在打印“b=”+b时,就会出错。
也就是说,你在使用变量的值时必须保证此时它有值(成员变量是默认赋值,所以无此问题)。
你不信可以简单的试试删除“b=”+b中的b,就不出错了。
作者: 放飞邹莺    时间: 2015-8-25 20:46
成员变量有默认初始化值,局部变量必须要初始化或者赋值调用,循环内的内容执不执行都会报错,因为b赋值是在循环内部,作用域就在循环内,循环执行完毕,b的值就在栈内存中消失.在循环外输出b就会报b为初始化的错,
作者: ruili    时间: 2015-8-25 20:57
for循环中的初始化变量的值在for循环结束后就会被清除
作者: 刘登飞    时间: 2015-8-25 21:12
表示能看懂问题但是说不出来,唉   还是等着基础班开学认真学吧
作者: 至尊幽蓝    时间: 2015-8-26 16:43
放飞邹莺 发表于 2015-8-25 20:46
成员变量有默认初始化值,局部变量必须要初始化或者赋值调用,循环内的内容执不执行都会报错,因为b赋值是在循 ...

值的作用域在哪不是看它在哪赋值,是看它在哪定义的,在外面定义的,在块内部赋值,出了块,这个变量值就是响应改变了,这个想想就知道
作者: 纳木错的程序猿    时间: 2015-8-26 16:54
第二个for循环中对变量b赋值后,待for循环结束。这个变量的值在内存中应该就释放掉了吧
作者: 肖天长    时间: 2015-8-26 17:55
局部变量的b在循环后就消失了 所以打印会报错
作者: SYAD    时间: 2015-8-26 20:33
b变量没有初始化导致的
作者: 大头爱傻瓜    时间: 2015-8-26 20:36
b值不再里层for中 不能打印出来的
作者: 809116766    时间: 2015-8-26 20:48
不错,不错,加油




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