0

当我尝试编译这个程序时,我在第 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陈述在正确的地方......至少对我来说它们似乎是,与我克隆它的程序相比,该程序似乎如此简单,我很难弄清楚为什么会这样声明无法访问。

复制代码时我做错了什么,我需要如何更正?

4

5 回答 5

8

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

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

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

于 2012-07-15T02:49:40.530 回答
3

您在 return 声明之后有一个声明。这是两个有问题的行:

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

切换它们。

System.out.println(theText);
return theText.toString();
于 2012-07-15T02:48:45.957 回答
2

return语句被执行时,该方法将控制权交给它的调用者。这就是为什么println不会运行;这就是编译器抱怨的原因。

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

于 2012-07-15T02:49:19.417 回答
1

print 语句出现在return语句之后。该函数将始终在到达 print 语句之前退出。“遥不可及”

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

交换两行的顺序,它将起作用。

于 2012-07-15T02:49:59.243 回答
1

return语句应始终位于定义块的末尾或最后一行。如果您在语句之后保留任何语句,则return这些语句是控制器无法访问的语句。通过 usingreturn语句,我们告诉控制应该明确地返回给它的调用者。

例如

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

在这个例子中,我们得到编译时错误,unreachable code因为控制无法到达最后一个执行语句。

因此,alwaysreturn语句应该是定义块的最后一条语句。

于 2012-07-15T06:48:16.847 回答