Java中无法访问的语句

时间:2013-10-10 11:32:22

标签: java bluej unreachable-statement

我在BlueJ的大学课程中工作,我已经设置了一个基本的任务,我们需要用户输入有关DVD的某些信息,例如导演,姓名,运行时间等。

我在Java编码,也使用Genio。以下代码是我如何获得并设置变量中的信息;

 public void getDVDInfo() {
    //Ask for info
    System.out.println("Please Enter the Film Info:");
    System.out.println("Film Name: ");
    System.out.println("Film Director: ");
    System.out.println("Lead Actor/Actress: ");
    System.out.println("Running Time: ");
}

public void setDVDInfo() {
    //set user input to variables
    filmName = Genio.getString();
    director = Genio.getString();
    leadActor = Genio.getString();
    runTime = Genio.getInteger();
}

这一切都根据我在BlueJ中使用的编译器工作,但是当我编写函数以将信息返回给用户时,就像这样;

  public String seeDVDInfo() {
    return filmName;
    return director;
    return leadActor;
}

public int seeRunTime() {
    return runTime;
}

它在return director;处出现了一个编译错误,这是一个无法访问的语句。我不明白这是从哪里来的,一切看起来都合适,任何人都可以帮助我吗?

提前致谢xx

7 个答案:

答案 0 :(得分:5)

问题出在这里:

public String seeDVDInfo() {
    return filmName;
    return director;
    return leadActor;
}
  • 在Java中的方法中不能有多个return语句。
  • 一旦return filmName;,就无法执行其他语句,因此会抛出无法发送的语句错误。

请参阅此thread以了解为什么Unreachable Statement是Java中的错误。

答案 1 :(得分:4)

如果,这是您代码中的方法:

public String seeDVDInfo() {
    return filmName;
    return director;
    return leadActor;
}

然后,问题是使用a return 语句完成了一个方法。它将使用提供的值退出方法。

根据您要提供/使用的信息,您有不同的方法来解决问题:

 public String seeDirector() {
     return director;
 }
 public String seeFilmName() {
     return director;
 }
 public String leadActor() {
     return director;
 }

考虑到java是一种OOP语言,我建议创建一个包含/封装可以返回的信息的类Film。所以它实际上看起来像这样:

public class Film {
    private String director;
    private String filmName;
    private String leadActor;

    public Film(String director, String filmName, String leadActor) {
        this.director = director;
        this.filmName = filmName;
        this.leadActor = leadActor;
    }

    public String getFilmName() {
         return filmName;
    }

    public void setFilmName(String filmName) {
         this.filmName = filmName;
    }

    public String getDirector() {
         return director;
    }

    public void setDirector(String director) {
         this.director = director;
    }
    public String getLeadActor() {
         return leadActor;
    }

    public void setLeadActor(String leadActor) {
         this.leadActor = leadActor;
    }
}

答案 2 :(得分:4)

您有错误 - 第一个return代码将运行并返回filmName的值,退出方法,因此无法返回其他回复。

方法只能返回一个对象。您可以使用复杂对象来保存一些数据并将其返回。

我建议你创建DvdInfo类:

public class DvdInfo {
    String filmName;
    String director;
    String leadActor;
// getters & setters...
}

并将其用作返回类型:

public DvdInfoseeDVDInfo() {
    new DvdInfo(filmName, director, leadActor);
}

答案 3 :(得分:4)

seeDVDInfo方法'return filmName'中的第一个语句返回filmName变量并退出seeDVDInfo方法......因此,其他2个语句将永远不会运行。因此,返回导演和返回的leadActor是“无法访问的”....

public String seeDVDInfo() {
    return filmName;
    return director;
    return leadActor;
}

来自Java教程:

A method returns to the code that invoked it when it completes all the statements in the method, reaches a return statement, or throws an exception (covered later), whichever occurs first.

http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

答案 4 :(得分:3)

这是因为一旦从方法返回,返回语句后剩下的代码将无法访问,因此无法编译。

在这里,我将尝试用3个场景解释你。

场景1: 对于守则,

public void helloWorld() {
  System.out.println("Hello");
  return;
  System.out.println("World");
 }

标记为粗体字母的Prited Line将无法编译。

情景2:

public void helloWorld() {
   System.out.println("Hello");
 if(true) {
      return;
  }
   System.out.println("World");
}

此编译成功。 这些规则中最常用的逻辑是,如果条件表达式判定它的计算结果为false,则该块包围的代码无法访问,然后该块被判定为无法访问。然后它就变成了错误。

仅针对'if'构造规则不同。不评估和决定条件表达式。无论if条件中的表达式是什么,都不会对它进行评估以确定代码块是否可达,因此即使我们在if语句中将常量值'false'作为条件表达式,我们也不会得到错误。这是特殊处理,为开发人员提供便利。开发人员可以在if语句中使用标志变量,默认最终值为false或true。只需将标志变量从false更改为true,反之亦然,开发人员可以重新编译程序并以不同方式使用它。

情景3:

public void helloWorld() {
   System.out.println("HelloWorld");
 while(true) {
      return;
  }
  System.out.println("World");
}

这给出了无法访问的异​​常编译错误,如上所述。

答案 5 :(得分:2)

在一个方法中不能有多个返回,这就是为什么返回后的下一行无法访问

  public String seeDVDInfo() {
    return filmName;
    //return director; 
    //return leadActor;
}

答案 6 :(得分:0)

你试图返回三个字符串 - >失败了。

请改用:

public List<String> seeDVDInfo() {
    List<String> dvdInfos = new ArrayList<>();
    dvdInfos.add(filmName);
    dvdInfos.add(director);
    dvdInfos.add(leadActor);
    return dvdInfos;
}