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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class JuBuBianLianFormat1 //局部变量初始化问题{
        public static void main(String[] args)
        {
                //定义3个局部变量并对x、y进行初始化
                int x = 1,y = 2,z;
                for (int i=0; i<10; i++)
                {
                        //对z进行初始化
                        z = x+y;
                }
                //打印z的值
                System.out.println(z);
        }
}
为什么该程序在编译时会报错:
JuBuBianLianFormat1java:10: 错误: 可能尚未初始化变量z
                System.out.println(z);

7 个回复

正序浏览
cp0717 中级黑马 2016-4-11 19:30:47
8#
丶半度微凉 发表于 2016-4-10 23:06
这种和上面的略有不同,上面的你定义了三个变量,虽然你i

多谢。了解了
回复 使用道具 举报
cp0717 发表于 2016-4-10 19:43
谢谢回答。在for循环中初始化不行么?
如果程序改成如下所示,编译时并不会报错,也可以正常运行呀。这两 ...

这种和上面的略有不同,上面的你定义了三个变量,虽然你i<10,但是java编译不检查值,只检查语法错误,所以java判断你的for循环有可能不会执行或者说没有满足条件,这时就会执行后面的打印语句,而你要输出z,但是z没有默认值,所以他会报错。。。而下面的你用的是if和else,也就是说一定会执行if和esle其中的一个,所以z一定会获得数值,这时他就不会报错。总的来说java编译只检查语法错误,不检查数值,所以就像你的for,他会判断你的for有可能不执行,那么也就不会给z赋值,所以就报错了

评分

参与人数 1黑马币 +1 收起 理由
cp0717 + 1 很给力!

查看全部评分

回复 使用道具 举报
在方法中的变量都是局部变量,局部变量存放在栈内存中,栈内存中的变量没有默认值,而java编译只检查语法错误,不检查变量的值,所以你需要先给z赋值才可以使用
回复 使用道具 举报
木丶子李 发表于 2016-4-9 18:49
z是局部变量,局部变量使用前必须初始化

不能在循环语句中初始化么?
回复 使用道具 举报
IT金城武 发表于 2016-4-9 18:43
在方法里定义的变量叫局部变量,局部变量使用前必须初始化值。而z是在主方法里定义的,也属于局部变量,是 ...

谢谢回答。在for循环中初始化不行么?
如果程序改成如下所示,编译时并不会报错,也可以正常运行呀。这两种情况有什么不同么?
if(x>=y)
{z=x-y;}
else
{z=x+y;}
System.out.println(z);
回复 使用道具 举报
z是局部变量,局部变量使用前必须初始化
回复 使用道具 举报
在方法里定义的变量叫局部变量,局部变量使用前必须初始化值。而z是在主方法里定义的,也属于局部变量,是用前应初始化z的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马