黑马程序员技术交流社区

标题: 大家看看这是为什么 [打印本页]

作者: 邢金华    时间: 2012-3-10 15:27
标题: 大家看看这是为什么
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不是已经初始化了吗。

作者: 房宝彬    时间: 2012-3-10 15:39
本帖最后由 房宝彬 于 2012-3-10 15:40 编辑

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


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

作用域?不是在同一个大括号内就行吗?
作者: 李明伟    时间: 2012-3-10 16:23
虽然你在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;
}
}


这样的话就没有问题啦

作者: 黄方    时间: 2012-3-10 16:37
嗯嗯,你定义的变量只能作用在case区域内!!
作者: 付鹏    时间: 2012-3-10 16:44
你的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




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