java中的return關(guān)鍵字使用解讀
return的作用
a.返回方法的返回值(運(yùn)行結(jié)果)
具體表現(xiàn): 返回不被void關(guān)鍵字修飾的方法的返回值
語法: return 返回值;
注意:返回值類型需要與方法名前面的數(shù)據(jù)類型保持一致
示例代碼如下:
import java.util.Scanner; public class Practice { public static void main(String[] args) { int year=2020; if(isLeapYear(year)){ System.out.println(year+"是閏年"); }else{ System.out.println(year+"是平年"); } } //在isLeapYear是返回實(shí)參傳過來的年是否是閏年的結(jié)果,若是,則返回true,否則返回false public static boolean isLeapYear(int year){ if(year%400==0||(year%4==0&&year%100!=0)){ return true; } return false; } }
示例代碼截圖如下所示:
b.結(jié)束當(dāng)前方法
語法為: return;
必須要在方法體里頭書寫才會(huì)生效
示例代碼如下所示:
public class Practice { public static void main(String[] args) { //當(dāng)輸入第10句堅(jiān)持就是勝利時(shí),就結(jié)束這個(gè)程序 // 此時(shí)我們可以在main方法里面使用return關(guān)鍵字 int i=0; while(true){ System.out.println("堅(jiān)持就是勝利"+(++i)); if(i==10){ System.out.println("此時(shí)程序結(jié)束!!!"); return; } } } }
示例代碼截圖如下所示
return關(guān)鍵字常見問題
編譯器如何判定非void修飾的方法的返回值是否合理???
1.核心判斷依據(jù)
任意情況下該方法都有返回值,
2.例如如下所示代碼
是會(huì)運(yùn)行成功,還是會(huì)報(bào)錯(cuò)呢?
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ boolean flag=true; if(flag){ return 1; } } }
解答:在idea中編譯通過不了,提示Missing return statement(沒有返回語句)
原因如下:
- 編譯器不知道flag的值,也就是說if語句在編譯器眼中是可能運(yùn)行也可能不運(yùn)行
- 也就是說可能會(huì)有返回值,可能也沒有返回值。
- 因此不符合任何條件下都有返回值這個(gè)要求,因此就會(huì)提示沒有返回語句
3.那么如何解決這個(gè)問題呢?
3.1 第一種,{}里面(循環(huán)、分支啥的)的內(nèi)容用變量去進(jìn)行接收,然后返回變量的值
語法
public static 變量數(shù)據(jù)類型 test(){ 變量數(shù)據(jù)類型 變量名=默認(rèn)值; boolean flag=true; if(flag){ 變量名=特定值; } return 變量名; }
對(duì)之前的錯(cuò)誤代碼進(jìn)行改進(jìn)的結(jié)果如下所示:
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ int result=55; //定義一個(gè)變量來接收返回的結(jié)果 boolean flag=true; if(flag){ result=100; } return result; } }
3.2 第二種,{}里面和外面都有返回值
public static 變量數(shù)據(jù)類型 test(){ boolean flag=true; if(flag){ return 數(shù)值1; } return 數(shù)值2; //數(shù)值1和數(shù)值2的數(shù)據(jù)類型應(yīng)與變量數(shù)據(jù)類型保持一致 }
對(duì)之前的錯(cuò)誤代碼進(jìn)行改進(jìn)的結(jié)果如下所示:
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ //if里面外面均有返回值,此時(shí)編譯器就不用擔(dān)心有可能無返回值的情況了 boolean flag=true; if(flag){ return 100; } return 55; } }
return后面是否可以寫其他語句???
分析
當(dāng)return的作用為返回方法的運(yùn)行結(jié)果時(shí)
以下代碼是否會(huì)報(bào)錯(cuò)?
public class Practice { public static void main(String[] args) { System.out.println(test()); } public static int test(){ return 66; System.out.println("查看是否報(bào)錯(cuò)"); } } //此題會(huì)報(bào)錯(cuò)
答:
會(huì)報(bào)錯(cuò),因?yàn)榘凑照碚f當(dāng)return所在語句運(yùn)行完成后,意味著該次方法調(diào)用語句完成,而return后面的語句壓根就沒有執(zhí)行的可能。
因此在編譯器編譯的過程中,會(huì)報(bào)錯(cuò),報(bào)錯(cuò)提示你應(yīng)該把不可訪問(多余)的語句給去掉。
當(dāng)return的作用為結(jié)束當(dāng)前方法時(shí)
以下代碼是否會(huì)報(bào)錯(cuò)
public class Practice { public static void main(String[] args) { System.out.println("專注能有效提高做事效率!!!"); return; System.out.println("科學(xué)表明"); } }
答:
會(huì)報(bào)錯(cuò),因?yàn)榘凑照碚f使用return關(guān)鍵字結(jié)束當(dāng)前方法后,意味著該方法(緊鄰著的)后面的語句不可能有機(jī)會(huì)去運(yùn)行,因此編譯器會(huì)給出錯(cuò)誤提示Unreachable statement(不可訪問的語句),因此此時(shí)return后面也不能寫其他語句。
總結(jié)
無論是返回方法的運(yùn)行結(jié)果還是結(jié)束當(dāng)前方法,后面均不可以寫其他語句
return所在語句后面不可以寫其他語句。(其他語句和return在同一個(gè){}里面的情況)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
RestTemplate報(bào)錯(cuò)400 Bad Request的解決方案
在使用Spring Boot時(shí),若直接通過@Autowired注入RestTemplate可能會(huì)遇到400BadRequest錯(cuò)誤,原因在于Spring Boot官方文檔指出,由于RestTemplate實(shí)例通常需要在使用前進(jìn)行定制,因此Spring Boot不會(huì)自動(dòng)配置單個(gè)RestTemplate Bean2024-11-11Java實(shí)現(xiàn)解析JSON大文件JsonReader工具詳解
這篇文章主要介紹了Java實(shí)現(xiàn)解析JSON大文件的工具JsonReader使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01利用Java實(shí)現(xiàn)天氣預(yù)報(bào)播報(bào)功能
這篇文章主要為大家介紹了如何利用Java語言實(shí)現(xiàn)天氣預(yù)報(bào)播報(bào)功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-06-06springboot2.3之后hibernate-validator依賴缺失【踩坑】
這篇文章主要介紹了springboot2.3之后hibernate-validator依賴缺失【踩坑】,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11GraalVM?native-image編譯后quarkus的超音速啟動(dòng)
這篇文章主要介紹了經(jīng)過GraalVM?native-image編譯后的quarkus,來帶大家驗(yàn)證一下號(hào)稱超音速亞原子的quarkus是否名副其實(shí),有需要的朋友可以借鑒參考下,希望能夠有所包幫助2022-02-02