簡體   English   中英

在void方法結束時返回意味着什么?

[英]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.

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