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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邢金华 黑马帝   /  2012-3-10 15:27  /  2028 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test {

public static void main(String[] args) {
outputValue(1);
}

private static void outputValue(int a) {
switch (a) {
case 1:
int b = 0;
System.out.print(b);
break;
case 2:
int c = b;
System.out.print(c);
break;
}
}

}


错误提示: Test.java:14: 错误: 可能尚未初始化变量b   可是b不是已经初始化了吗。

7 个回复

倒序浏览
本帖最后由 房宝彬 于 2012-3-10 15:40 编辑

很明显是 case2 里的b没有初始化,注意作用域的问题就OK.


吧int b = 0; 放在switch外面
回复 使用道具 举报
int c = b;
取不到b的值~~~
回复 使用道具 举报
你这个程序根本没法通过编译,因为你的b变量没有初始化,你应该把b变量提到外面来给它初始化。
回复 使用道具 举报
房宝彬 发表于 2012-3-10 15:39
很明显是 case2 里的b没有初始化,注意作用域的问题就OK.

作用域?不是在同一个大括号内就行吗?
回复 使用道具 举报
虽然你在case 1:中对变量b进行了初始化,但是如果你在调用方法时传入的参数是2的话,那么对于b来说就没有初始化,也就是说变量b的作用域仅限于case 1:内,是一个局部变量。

正确写法:
private static void outputValue(int a) {
int b=0;
switch (a) {
case 1:
System.out.print(b);
break;
case 2:
int c = b;
System.out.print(c);
break;
}
}


这样的话就没有问题啦

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
黄方 中级黑马 2012-3-10 16:37:31
7#
嗯嗯,你定义的变量只能作用在case区域内!!
回复 使用道具 举报
付鹏 中级黑马 2012-3-10 16:44:54
8#
你的switch (a) {
case 1:
int b = 0;
System.out.print(b);
里面的b是局部变量 作用于只能在case1中
而case 2:
int c = b;
System.out.print(c);
break;
里面的局部变量b根本没有被初始化。
你可以在case2中初始化一下b
或者在switch语句外面定义一个成员变量b

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马