黑马程序员技术交流社区

标题: 急,求大神 [打印本页]

作者: GYSWL    时间: 2014-12-11 22:03
标题: 急,求大神
  1. public class TransDemo
  2. {
  3.         public static void main(String[] args) {
  4.                 int i,j;
  5.                 //int j;
  6.                 outer: for (i = 1; i < 3; i++) {
  7.                         inner: for(j = 1; j < 3; j++) {

  8.         }

  9. }
  10. System.out.println(j+"  "+i);

  11. }}
复制代码

为什么最后打印加去j可以打印,加了j就报错

作者: Honelyboy    时间: 2014-12-11 22:14
你把int j;注释了,内嵌for里面的j只是个局部变量。所以会报错。
作者: 農邨尛夥兒    时间: 2014-12-11 22:16
JVM在编译时会考虑到for循环可能进不去 有几率造成j没有赋值 SOP的时候调用一个未赋值的变量
作者: 史云龙    时间: 2014-12-11 22:19
j没有被初始化。或者说内层循环中对j的初始化的作用没有作用到输出语句。
和下面的情况一样。
for(int i=0;i<10;i++){
   int j=0;
}
System.out.println(j);
作者: V字仇杀    时间: 2014-12-11 22:22
没有了j的局部变量。在for循环内的j只是在for里面可用。跳出for循环直接当垃圾释放了,后面当然读不到了。jvm虚拟机就会报错。
作者: yibo924    时间: 2014-12-11 22:53
int i,j;的作用域是整个主函数,在这个范围内又定义一次   j,就会报错。就如同真假孙悟空同时出现,当然天下大乱
作者: innovator    时间: 2016-5-17 13:35
局部变量必须初始化才可以。在for循环外初始化就没事了




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