为什么我在Java中收到无法访问的语句错误?

当我尝试编译这个程序时 ,我在第21行得到一个“无法访问的语句”错误:

import java.util.*; import java.io.*; import java.nio.file.*; import java.lang.StringBuilder; class FilePrep { public static void main(String args[]) { } public String getStringFromBuffer() { try { Path file = Paths.get("testfile2.txt"); FileInputStream fstream = new FileInputStream("testfile2.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String inputLine = null; StringBuffer theText = new StringBuffer(); while((inputLine=br.readLine())!=null) { theText.append(inputLine+" "); } return theText.toString(); System.out.println(theText); // <-- line 21 } catch (Exception e) { System.err.println("Error: " + e.getMessage()); return null; } } } 

完整的编译器输出是:

 Main.java:21: error: unreachable statement System.out.println(theText); ^ Main.java:28: error: missing return statement } ^ 2 errors 

认为 return声明是在正确的位置……它们似乎至少对我来说,与我克隆它的程序相比,程序看起来很简单,我很难弄清楚为什么这句话无法达成。

复制代码时我做错了什么,我该如何纠正?

你是对的,假设你的问题在这里:

 return theText.toString(); System.out.println(theText); 

return函数将终止你的方法,这意味着不会执行任何代码行。 如果您希望打印件通过,则应将其移至return语句上方。

你在return语句后面有一个声明。 这是两个违规行:

 return theText.toString(); System.out.println(theText); 

切换它们。

 System.out.println(theText); return theText.toString(); 

执行return语句时,该方法放弃对其调用者的控制。 这就是println无法运行的原因; 这就是编译器抱怨的原因。

无法访问的语句是程序中逻辑错误的某些可靠指标。 这意味着你输入了不会被执行的语句,但你认为它们会被执行。 编译器分析流,并将这些语句作为错误消息报告给您。

print语句出现在return语句之后。 该函数将在到达print语句之前始终退出。 “无法接通”

  return theText.toString(); System.out.println(theText); 

切换两条线的顺序,它将起作用。

return语句应始终位于定义块的结尾或最后一行。 如果在return语句之后保留任何语句,则这些语句是控制器无法访问的语句。 通过使用return语句,我们告诉控件应该显式返回其调用者。

例如

 public class Z { public int test() { System.out.println(10); return 10; System.out.println(20); } } 

在此示例中,我们将编译时错误视为unreachable code因为控件无法访问最后一条语句以执行。

因此,始终return语句应该是定义块的最后一个语句。