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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯伟 中级黑马   /  2012-9-21 18:38  /  1929 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);//编译成功
复制代码
为什么同样是在外面声明变量,在循环语句中赋值后在外面输出变量编译失败,而判断语句却能成功??
在外面声明变量时就初始化就能通过编译,将输出语句放在循环体内也能通过。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 新手提问 多多加油

查看全部评分

6 个回复

倒序浏览
变量遵循:先赋值,后使用!
你的num没初始化,在外边打印就会报错。 int num = 0;
输出语句放到for()内的是循环赋值打印。
要养成良好的编程习惯,在声明变量的时候给个初值,就没那么多麻烦了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
严海荣 发表于 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);
复制代码
为什么这个不报错
回复 使用道具 举报
sclsfw 发表于 2012-9-21 20:34
为什么这个不报错

因为你赋初值了,你这个写法其实本质上和
  1. int num;
  2.                           num=1;
复制代码
一样的,你先定义一个变量,然后再赋值。和你定义一个变量就赋值一样(前提是你还没有使用这个变量),但是你上面的那个num=x; 局部变量num使用了,所以报错。
回复 使用道具 举报
王小闲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);//编译成功
复制代码
为什么同样的语句放在循环和判断语句中的结果不一样?
回复 使用道具 举报
sclsfw 发表于 2012-9-21 21:19
把for换成while也会失败为什么同样的语句放在循环和判断语句中的结果不一样? ...

本人疑问??
不是虚拟机会给Num默认初始化值为0吗??那怎么不打印为o呢??
回复 使用道具 举报
冯伟 中级黑马 2012-9-21 23:13:40
7#
赵永康 发表于 2012-9-21 22:29
本人疑问??
不是虚拟机会给Num默认初始化值为0吗??那怎么不打印为o呢?? ...

楼上说的应该是类中的属性在类实例化对象时才会默认初始化
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马