这里我试图通过输入月份数来获得输出月份,但为什么我有错误 - " monthString"可能还没有被初始化? - 为什么我没有得到来自" monthString"?
import java.util.Scanner;
public class SwitchClass {
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
System.out.printf(" when did u born ? ");
int monthNumber = input.nextInt();
String monthString ;
switch (monthNumber)
{
case 1:
monthString = "January ";
break;
case 2:
monthString = "February ";
break;
case 3:
monthString = "March ";
break;
case 4:
monthString = "April ";
break;
case 5:
monthString = "May";
break;
case 6:
monthString = "June";
break;
case 7:
monthString = "July";
break;
case 8:
monthString = "August";
break;
case 9:
monthString = "September";
break;
case 10:
monthString = "October";
break;
case 11:
monthString = "November";
break;
case 12:
monthString = "December";
break;
}
System.out.println(monthString); }
}
答案 0 :(得分:8)
如果monthNumber
不在1到12之间怎么办?在这种情况下,monthString
不会被初始化。您在声明它时应该给它一些默认值:
String monthString = null; // or ""
答案 1 :(得分:5)
在switch语句中添加默认大小写是个好主意。
示例:
switch (monthNumber) {
case 1: monthString = "January";
break;
//other cases...
default: monthString = "Invalid Month Number";
break;
}
这样,如果monthNumber
不是1-12,那么仍然存在切换语句流向的默认情况。
答案 2 :(得分:1)
可能是这个链接有助于正确理解。
http://stackoverflow.com/questions/5478996/should-java-string-method-local-variables-be-initialized-to-null-or
答案 3 :(得分:0)
monthString是main()中的局部变量,因此必须初始化它以防止编译器错误。
如果monthString是一个Class变量,则不必显式初始化它。
您可以通过将monthString移到main()之外并将其声明为:
来完成此操作static String monthString;
答案 4 :(得分:0)
因为Java语言的设计者认为它更有意义!初始化变量时,代码更易于阅读。语句String foo;
感觉不确定,因为您必须猜测String的默认值是什么,而String foo = null;
更具确定性。
为了给你一个更明显的例子,请考虑一下:
int x;
Int y;
你能很快猜出默认值是什么吗?您可能需要暂停几秒才能意识到x可能为0而y可能为空
答案 5 :(得分:-3)
局部变量必须在使用前始终初始化。 对于Java 6,编译器不考虑流控制块和try-catch块中的变量的" Incomplete" 初始化。必须对所有情况进行初始化:
如果 - 否则:
function yourFn(){
//Your code
echo $wpdb->insert_id;
}
while循环:
$.ajax({url: server_side_url, success: function(result){
$(Inputfield).val(result);
}});
Try-Catch块:
String s;
int a = 10;
if(a > 5){
s = "5";
}else{
System.out.println("");
}
System.out.println(s); // error if s isn't initialized within both if and else blocks
切换块:
String s;
int a = 10;
while(a > 0) {
s= ">0";
a--;
}
System.out.println(s);// error if s isn't initialized outside the while
在切换之前初始化变量,一切都会好的。
String s;
try {
s = "";
} catch (Exception e) {}
System.out.println(s);// error if s isn't initialized within both try and catch blocks