java吧 关注:1,298,944贴子:12,836,415
  • 16回复贴,共1

Java 每日一题:2016年8月14日

只看楼主收藏回复

每天在这里贴一道 Java 题。
问题不难,有 Java 的基本知识就可以做出来。
问题也不偏,日常工作中时不时会碰到。
每日一题索引页:52.36.153.52:8080/javaquestions/

请问 注释2 处为什么有编译错误?


1楼2016-08-14 14:26回复
    没有初始化s


    IP属地:江苏来自Android客户端2楼2016-08-14 14:31
    回复
      2026-03-08 18:43:20
      广告
      不感兴趣
      开通SVIP免广告
      源程序:
      package javaquestions;
      import java.io.BufferedReader;
      import java.io.FileReader;
      import java.io.IOException;
      public class JavaQuestion20160814
      {
      public static void main(String[] args)
      {
      String s;
      try
      {
      FileReader fr = new FileReader("myfile.txt");
      BufferedReader br = new BufferedReader(fr);
      while ((s = br.readLine()) != null) // 1
      System.out.println(s);
      br.close();
      }
      catch (IOException e)
      {
      System.out.println(s); // 2
      System.out.println("io error");
      }
      }
      }


      3楼2016-08-14 14:33
      回复
        方法内局部变量,不能被自动初始化,需要手动初始化变量引用在进行调用。从程序中看出发生异常后会跳入catch,变量s无初始化便调用所以出了异常


        IP属地:河北4楼2016-08-14 14:35
        回复
          catch里,s没有初始化


          IP属地:上海5楼2016-08-14 14:45
          回复
            需要初始化


            来自iPhone客户端6楼2016-08-14 15:19
            回复
              close关闭资源最好用finally,


              来自iPhone客户端7楼2016-08-14 15:20
              收起回复
                我觉得是s没有初始化
                 ✎﹏﹏
                你们以为我会真的在乎这25个字?


                来自Android客户端8楼2016-08-14 15:48
                回复
                  2026-03-08 18:37:20
                  广告
                  不感兴趣
                  开通SVIP免广告
                  局部变量必须赋值后才能使用,成员变量会有默认初始化值


                  IP属地:四川来自Android客户端9楼2016-08-14 17:56
                  回复
                    第14行创建 FileReader 对象可能会产生异常:
                    public FileReader(String fileName) throws FileNotFoundException
                    第16行运行BufferedReader 的 readline 方法也可能会产生异常:
                    public String readLine() throws IOException
                    如果在第14行产生异常,s 肯定没赋值。
                    第16行是个循环语句,任何一次循环都可能会产生异常。如果是第一次循环就产生异常,s 没有值;如果在第二次或以后的循环中产生异常,s 是有值的。
                    产生异常后,会进入 catch 块,编译器不能确定此时 s 是否有值,所以会有警告:The local variable s may not have been initialized (局部变量 s 可能为初始化)


                    12楼2016-08-17 12:58
                    回复
                      要么在try外面初始化,要么catch和try里面都有初始化,,,我认为应该是这样吧,新手勿喷


                      IP属地:江苏来自Android客户端13楼2016-08-22 15:46
                      回复