黑马程序员技术交流社区

标题: 关于循环内赋值报错 [打印本页]

作者: 冯伟    时间: 2012-9-21 18:38
标题: 关于循环内赋值报错
本帖最后由 sclsfw 于 2012-9-22 15:32 编辑
  1. int num;
  2. for(int x=0;x<5;x++){
  3.          num = 4;
  4. }
  5. System.out.println(num);//编译失败
复制代码
  1. int num;
  2. int n=1;
  3. while(n==1){
  4.         num=4;
  5.         n=2;
  6. }
  7. System.out.println(num);//编译失败
复制代码
  1. int num;
  2. if(true){
  3.         num=4;
  4. }
  5. System.out.println(num);//编译成功
复制代码
为什么同样是在外面声明变量,在循环语句中赋值后在外面输出变量编译失败,而判断语句却能成功??
在外面声明变量时就初始化就能通过编译,将输出语句放在循环体内也能通过。


作者: 严海荣    时间: 2012-9-21 18:59
变量遵循:先赋值,后使用!
你的num没初始化,在外边打印就会报错。 int num = 0;
输出语句放到for()内的是循环赋值打印。
要养成良好的编程习惯,在声明变量的时候给个初值,就没那么多麻烦了。
作者: 冯伟    时间: 2012-9-21 20:34
严海荣 发表于 2012-9-21 18:59
变量遵循:先赋值,后使用!
你的num没初始化,在外边打印就会报错。 int num = 0;
输出语句放到for()内的 ...
  1. int num;
  2. if(true){
  3. num = 1;
  4. }
  5. System.out.println(num);
复制代码
为什么这个不报错
作者: 王小闲7    时间: 2012-9-21 20:49
sclsfw 发表于 2012-9-21 20:34
为什么这个不报错

因为你赋初值了,你这个写法其实本质上和
  1. int num;
  2.                           num=1;
复制代码
一样的,你先定义一个变量,然后再赋值。和你定义一个变量就赋值一样(前提是你还没有使用这个变量),但是你上面的那个num=x; 局部变量num使用了,所以报错。
作者: 冯伟    时间: 2012-9-21 21:19
王小闲7 发表于 2012-9-21 20:49
因为你赋初值了,你这个写法其实本质上和一样的,你先定义一个变量,然后再赋值。和你定义一个变量就赋值 ...
  1. int num;
  2. for(int x=0;x<1;x++){
  3.     num=5;
  4. }
  5. System.out.println(num);//编译失败
复制代码
把for换成while也会失败
  1. int num;
  2. if(true){
  3.     num=5;
  4. }
  5. System.out.println(num);//编译成功
复制代码
为什么同样的语句放在循环和判断语句中的结果不一样?
作者: 赵永康    时间: 2012-9-21 22:29
sclsfw 发表于 2012-9-21 21:19
把for换成while也会失败为什么同样的语句放在循环和判断语句中的结果不一样? ...

本人疑问??
不是虚拟机会给Num默认初始化值为0吗??那怎么不打印为o呢??

作者: 冯伟    时间: 2012-9-21 23:13
赵永康 发表于 2012-9-21 22:29
本人疑问??
不是虚拟机会给Num默认初始化值为0吗??那怎么不打印为o呢?? ...

楼上说的应该是类中的属性在类实例化对象时才会默认初始化




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