[英]What does return mean at the end of a void method?
我知道void
方法不會返回任何值,但我仍然可以編寫代碼
void nothingDohere() {return;}
那么,如何“無效”使用“返回”聲明呢?
沒有值的return語句只能在void
方法(或構造函數)中使用,並且只需執行返回的“現在退出方法”部分。 考慮帶有回報的聲明有兩個目的:
finally
塊) void
方法中的return語句只能實現其中的第一個; 第二個在void
方法中沒有任何意義。
從Java語言規范的14.17節 :
沒有Expression的return語句必須包含在聲明的方法體中,使用關鍵字void,不返回任何值(第8.4節),或者包含在構造函數體(第8.8節)中。 如果返回語句出現在實例初始化程序或靜態初始化程序(第7.7節)中,則會發生編譯時錯誤。 沒有Expression的return語句嘗試將控制權轉移給包含它的方法或構造函數的調用者。 確切地說,沒有表達式的return語句總是突然完成,原因是沒有值的返回。
你的return語句沒有參數,所以它沒有返回任何東西,因此返回的值是'void'。
在執行return語句的方法中的任何一點,它都會從方法中退出。所以返回這里只是結束你方法的執行。
如果您嘗試從void方法嘗試某些(某些值),例如
return"xzy";
你會得到complition錯誤
Void methods cannot return a value
return
語句還可以用於使執行返回到此方法的調用者。 因此,return語句將立即終止執行它的方法。
因此,您的示例代碼:
void nothingDohere() {
return ;
}
終止方法調用並立即返回給方法的調用者。
在你提到的情況下,返回確實在語義上是多余的(雖然在語法上需要它 - 如果沒有這個返回,Javac將不會編譯)。 返回終止方法。
但是在某些情況下,希望在方法中有多個退出點,例如:
public void doDifferentThings(){
if(){
//something done
return;
}
else{
//something else done
return;
}
}
有些人認為這種糟糕的設計(與單點退出相矛盾),但它可以使您的代碼更清晰。
簡單地說,它從void方法內部返回到程序調用該方法的位置:
public calss Test
{
private boolean flag = true;
public Test()
{
... // (1)
... // (2)
voidMethod(); // (3)
... // (7)
... // (8)
}
private void voidMethod()
{
... // (4)
... // (5)
if(flag) return; // (6)
...
...
}
}
從函數返回時,將控件返回到調用返回函數的函數。 如果返回一個值,則調用函數將獲得該值,否則調用函數將僅獲取控件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.