java吧 关注:1,299,092贴子:12,839,464
  • 2回复贴,共1

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

取消只看楼主收藏回复

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

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


1楼2016-08-14 14:26回复
    源程序:
    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
    回复
      2026-03-10 15:08:10
      广告
      不感兴趣
      开通SVIP免广告
      第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
      回复