簡體   English   中英

Java中無法訪問的語句

[英]Unreachable Statement in Java

我正在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;處出現了編譯器錯誤return director; 那是無法達成的聲明。 我不明白這是從哪里來的,看起來都不錯,有人可以幫我嗎?

在此先感謝xx

問題在這里:

public String seeDVDInfo() {
    return filmName;
    return director;
    return leadActor;
}
  • Java方法中不能有多個return語句。
  • 一旦return filmName; ,其他語句無法執行,因此會引發Unreachable Statement錯誤。

請參閱此線程以了解為什么Unreachable Statement是Java中的錯誤。

如果這確實是您代碼中的方法:

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

然后,問題是方法用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;
    }
}

您遇到錯誤-第一個return代碼將運行並返回filmName的值, filmName退出該方法,因此無法實現其他返回調用。

一個方法只能返回一個對象。 您可以使用復雜的對象來保存一些數據並將其返回。

我建議您創建DvdInfo類:

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

並將其用作返回類型:

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

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

這是因為一旦從方法中返回,則return語句后剩下的任何代碼都將無法訪問,因此將無法編譯。

在這里,我將嘗試用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語句中的條件表達式為常量“ false”,我們也不會出錯。 為了給開發人員提供便利,對它進行了特殊處理。 開發人員可以在if語句中使用標志變量,並將默認最終值設置為false或true。 只需通過將flag變量從false更改為true即可,反之亦然,開發人員可以重新編譯該程序並以不同的方式使用它。

方案3:

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

如上所述,這會產生無法訪問的異​​常編譯錯誤。

一個方法中不能有多個返回,這就是為什么返回后的下一行不可訪問的原因

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

您正在嘗試返回三個字符串->失敗。

使用此代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM