import java.io.*;
public class Test{public static void main(String args[]){
String name;
int age;try{BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入你的名字:");
name=input.readLine();
System.out.print("请输入你的年龄:");
age =Integer.parseInt(input.readLine());}catch(IOException e){}System.out.println(name+" is "+age);}
}会出现这样的错误提示:
Test.java:18: variable name might not have been initialized
System.out.println(name+" is "+age);
                   ^
Test.java:18: variable age might not have been initialized
System.out.println(name+" is "+age);如果把
System.out.println(name+" is "+age);
这句放进try里面才可以编译成功这是为什么呢?
                               ^
2 errors

解决方案 »

  1.   

    在定义name,age的时候给它们做个初始化工作,比如name="",age=0,这样在java编译期间,它就不会认为你没有初始化了。在catch中可以,大概是因为它已经是异常流程了。虽然Java编译器表面上看起来这样很不聪明,但实际上这种方式能够帮我们消除这类隐藏的BUG,比如你的readLine里传进来的是直接Enter的空值,这样你的parseInt就会出现异常了。
      

  2.   

    name、age在进入catch块之前可能会没有初始化,因为根据程序的流程,有可能执行不到对name、age初始化的部分。
    类似的,在if和for等块的内部进行初始化也会有这个问题。字符串至少要初始化为""或者null,整数至少要初始化为0,-1等。