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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© GYSWL 中级黑马   /  2014-12-11 22:03  /  1910 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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就报错

6 个回复

倒序浏览
你把int j;注释了,内嵌for里面的j只是个局部变量。所以会报错。
回复 使用道具 举报
JVM在编译时会考虑到for循环可能进不去 有几率造成j没有赋值 SOP的时候调用一个未赋值的变量
回复 使用道具 举报
j没有被初始化。或者说内层循环中对j的初始化的作用没有作用到输出语句。
和下面的情况一样。
for(int i=0;i<10;i++){
   int j=0;
}
System.out.println(j);
回复 使用道具 举报
没有了j的局部变量。在for循环内的j只是在for里面可用。跳出for循环直接当垃圾释放了,后面当然读不到了。jvm虚拟机就会报错。
回复 使用道具 举报
int i,j;的作用域是整个主函数,在这个范围内又定义一次   j,就会报错。就如同真假孙悟空同时出现,当然天下大乱
回复 使用道具 举报
局部变量必须初始化才可以。在for循环外初始化就没事了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马