这是我编写的一个用来测试的方法
public void get()
{
String i;

try{

    InputStreamReader countReader = new InputStreamReader(System.in);
    BufferedReader bfreader = new BufferedReader(countReader);
    i=bfreader.readLine();
    }
catch(IOException e){}
System.out.println(i);
}
这个编译的时候出现了没有初始化变量i的错误
但是我把System.out.println(i);移动到try块内的时候就没有错了,代码如下
public void get()
{
String i;

try{

    InputStreamReader countReader = new InputStreamReader(System.in);
    BufferedReader bfreader = new BufferedReader(countReader);
    i=bfreader.readLine();     System.out.println(i);
    }
catch(IOException e){}
}
这是什么原因呢~~~~请赐教

解决方案 »

  1.   

    哈哈,这还不简单
    你把它移进try中,
    try{
        System.out.println(i);
       }那不是变成了叫程序:
    你给我试试System.out.println(i);有没有异常....那这样当然不会有错误-------而且它产生一个没有初始化变量i的异常,只是你代码没有catch罢了
      

  2.   

    呵呵,catch 块里的东西是不一定执行的!只有当你有异常的时候才回执行!你的程序逻辑不对!为啥要吧System.out.println(i)放在catch块里?我的理解catch 块里是对异常的描述。加个finally呵呵!
      

  3.   

    你的第一段代码中,i=bfreader.readLine();如果抛出异常,那么i并没有被赋初值,因此try外部的打印语句这时调用未初始化的i就会报错当你把打印语句移至try内部i=bfreader.readLine()之后,如果这句抛出了异常,那么打印语句是执行不到的,所以也不会有所谓的调用未初始化变量的问题了ok?
      

  4.   

    而且它产生一个没有初始化变量i的异常,只是你代码没有catch罢了不太对...没有catch的话应该还是会报错,
    应该是某个地方catch了,但是没有输出罢了也就是说你的print语句实际上还是有异常
    只是你放到try中了,那就有可会被你下面catch到,而你catch了并没有处理(显示出来)而你放在catch中那就不会catch到,不会catch到那编译器就会帮你显示出来
      

  5.   

    kevinliuu(@_@) ( ) 信誉:107  2006-06-16 12:35:00  得分: 0  
     
    正解!*_*
      
     
      

  6.   

    不过我还是有点疑问:try{

        InputStreamReader countReader = new InputStreamReader(System.in);
        BufferedReader bfreader = new BufferedReader(countReader);
        i=bfreader.readLine();
        System.out.println("adfasd");
        System.out.println(i);
    }那么System.out.println("adfasd");可以被执行到
      

  7.   

    放在catch里只有产生异常了才能调用catch{}里面的,否则只实行try里的
      

  8.   

    i=bfreader.readLine(); 这句如果有异常,则直接进入catch块,i=bfreader.readLine()后面的语句不执行如果没有异常,则顺序执行语句
      

  9.   

    谢谢各位的回答我想说的是,我的意图是写一个方法里面进行几项操作,而我只捕获在控制台输入时的异常。而且我没有要把println(i)语句放到catch{}里面,而是放在了try{}catch{} 后面,这样为什么会编译不通过呢??难道编译器还要检测逻辑错误???
      

  10.   

    因为涉及io,所以可能产生异常,try语句还没执行到给i赋值的那条语句的时候 可能就已经产生了异常
    然后去catch 这时i并没有初始化,当然提示你说的错误
    java是个强制性的语言,必须遵循语法规则
    至于你说的新问题,还不是和以前一样,
      

  11.   

    没有初始化i
    将i赋初值=null
    然后将i放在catch后面就没有错误了!!
      

  12.   

    但是我试过把这个String放在方法外定义,把它当成了一个成员变量。这个时候也不会有提示错误,所以我才会有疑问的!!!