• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java教程
    Java標識符與關鍵字
    Java變量
    Java數據類型
    Java運算符
    Java控制語句
    Java方法
    Java面向對象
    Java對象的創建和使用
    Java封裝
    Java中static和this
    Java繼承
    Java方法覆蓋和多態
    Java super
    Java基礎練習題

    Java方法返回值詳解

     

     

    每個方法都是為了完成某個特定的功能,例如:登錄功能、求和功能等,既然是功能,那么當這個功能完成之后,大多數情況下都會有一個結果的,比如,登錄成功了或者失敗了(true/false),求和之后最后的結果是100或者200,當然也有極少數的情況下是沒有結果的。這個結果本質上就是一個數據,那么既然是一個數據,就一定會有對應的類型,所以在方法定義的時候需要指定該方法的返回值類型。

     

    java語言中方法的返回值類型可以是任何一種數據類型,包括基本數據類型,也包括引用數據類型,例如:byte,short,int,long,float,double,boolean,char,String,Student(自定義類)等。當然,如果這個方法在執行完之后不需要返回任何數據,返回值類型必須寫void關鍵字,不能空著不寫。

     

    關于方法的返回值在使用的時候有哪些注意事項呢,我們來看幾段代碼:

     

    public static int method1(){
    	
    }

     

    以上程序在編譯的時候,報錯了,錯誤信息是“缺少返回語句”,為什么呢?這是因為該方法在聲明的時候指定了方法結束之后返回int類型的數據,但是以上方法體中并沒有編寫“返回數據”的代碼。也就是說當一個方法在聲明的時候返回值類型不是void的情況下,要求方法體中必須有負責“返回數據”的語句。這樣的語句怎么寫呢?答案是:“return 數據;”(大家還記得第六章節控制語句中的返回語句嗎?這個就是),并且要求這個“數據”的類型要和聲明的返回值類型一致,要不然編譯器就會報錯了。代碼這樣寫就沒問題了:

     

    public static int method1(){
    	/*
    	return 1;
    	return 0;
    	return 100;
    	*/
    	int a = 100;
    	int b = 200;
    	return a + b;
    }

     

    如果代碼這樣寫呢?

     

    public static int method1(){
    	return 1;
    	System.out.println("hello world!");
    }

     

    編譯以上程序,我們可以看到編譯器報錯了,提示的錯誤信息是:“System.out.println("hello world!");”這行代碼是無法訪問的語句。這是為什么呢?因為在方法中如果一旦執行了帶有“return”關鍵字的語句,此方法就會結束,所以以上的程序中“System.out.println("hello world!");”這行代碼是永遠無法執行到的,所以編譯報錯了。得到的結論是:帶有return關鍵字的語句只要執行,所在的方法則執行結束。

     

    那這樣寫呢?

     

    public static int method1(){
    	boolean flag = true;
    	if(flag){
    		return 1;
    	}
    }

     

    還是編譯報錯,錯誤信息是“缺少返回語句”,為什么呢?實際上方法在聲明的時候指定了返回值類型為int類型,java語法則要求方法必須能夠“百分百的保證”在結束的時候返回int類型的數據,以上程序“return 1;”出現在if語句的分支當中,對于編譯器來說,它只知道“return 1;”有可能執行,也有可能不執行,所以java編譯器報錯了,不允許程序員這樣編寫代碼。來看以下代碼:

     

    public static int method1(){
    	boolean flag = true;
    	if(flag){
    		return 1;
    	}else{
    		return 0;
    	}
    }

     

    這樣就能編譯通過了,為什么呢?這是因為編譯器能夠檢測出以上的if..else..語句必然會有一個分支執行,這樣就不缺少返回語句了。其實以上代碼也可以這樣寫:

     

    public static int method1(){
    	boolean flag = true;
    	if(flag){
    		return 1;
    	}
    	return 0;
    }

     

    以上代碼也可以達到同樣的效果,因為“return 1;”如果不執行,則一定會執行“return 0;”,當然,如果執行了“return 1;”則方法一定會結束,“return 0;”也就沒有執行的機會了。再看下面的代碼:

     

    public static int method1(){
    	boolean flag = true;
    	if(flag){
    		return 1;
    		System.out.println("第1行");
    	}
    	System.out.println("第2行");
    	return 0;
    	System.out.println("第3行");
    }

     

    以上程序還是編譯報錯,哪里出錯了,為什么呢?其中“第1行”和“第3行”代碼沒有執行機會,編譯報錯,但“第2行”是有執行機會的。通過以上程序我們可以得出這樣的結論:在同一個“域”中,“return”語句后面是不能寫任何代碼的,因為它無法執行到。

     

    如果只是單純的完成以上代碼的功能我們也可以這樣寫:

     

    public static int method1(){
    	boolean flag = true;
    	return flag ? 1 : 0;
    }

     

    所以,一個功能的實現,代碼可以寫很多種不同的方式,慢慢培養吧同學們,這需要一個過程,千萬戒驕戒躁。我們接著看關于返回值還有哪些注意事項:

     

    public static void method2(){
    	return 10;
    }

     

    以上代碼編譯報錯,為什么呢?這是因為一個方法在聲明的時候返回值類型定義為void,這就表示該方法執行結束的時候不能返回任何數據,而以上程序中編寫了“return 10;”這樣的代碼,自然編譯器會報錯的。也就是說前后說法要一致,聲明的時候有返回值,那么代碼編寫的時候就必須有“return 值;”這樣的語句。如果聲明的時候沒有返回值,那么方法結束的時候就不能編寫“return 值;”這樣的語句。那么,大家再來看看以下的代碼:

     

    public static void method2(){
    	return;
    }

     

    經過測試,以上的代碼編譯通過了,也就是說當一個方法的返回值類型是void的時候,方法體當中允許出現“return;”語句(注意:不允許出現“return 值;”),這個語法的作用主要是用來終止方法的執行。當一個方法的返回值類型是void的時候,在方法執行過程中,如果滿足了某個條件,則這個方法可能就沒必要往下繼續執行了,想終止這個方法的執行,此時執行“return;”就行了。有一些同學在最初的學習過程中,對break和return認識的不夠清晰,我們來研究一下,請看以下代碼:

     

    public static void main(String[] args) {
    	for(int i = 1; i <= 10; i++){
    		if(i == 5){
    			break;
    		}
    		System.out.println("i = " + i);
    	}
    	System.out.println("hello world!");
    }

     

    運行結果如下圖所示:

     

    圖7-4:break測試

     

    public static void main(String[] args) {
    	for(int i = 1; i <= 10; i++){
    		if(i == 5){
    			return;
    		}
    		System.out.println("i = " + i);
    	}
    	System.out.println("hello world!");
    }

     

    運行結果如下圖所示:

     

    圖7-5:return測試

     

    通過以上的測試,我們可以得出break和return根本不是一個級別的,break用來終止循環,return用來終止一個方法的執行。接下來再看一段代碼:

     

    public static int method3(){
    	return;
    }

     

    經過測試,以上代碼編譯報錯,錯誤信息是:缺少返回值,為什么呢?這是因為方法在聲明的時候規定了返回int類型的值,但是在方法體當中執行了“return;”語句,并沒有返回具體的值,所以“return;”只能出現在返回值類型是void的方法中。

     

    接下來我們來看看,當一個方法執行結束之后怎么接收這個返回值呢?請看下面代碼:

     

    public static void main(String[] args) {
    	//可以編譯也可以正常運行
    	sumInt(10 , 20);
    	int retValue = sumInt(100 , 200);
    	System.out.println("計算結果 = " + retValue);
    	//編譯報錯,返回值類型是int,不能采用byte接收
    	//byte retValue2 = sumInt(1 , 2);
    }
    public static int sumInt(int a , int b){
    	return a + b;
    }

     

    運行結果如下圖所示:

     

    圖7-6:測試怎么接收返回值

     

    通過以上的測試我們得知,方法執行結束之后的返回值我們可以接收,也可以不接收,不是必須的,但大多數情況下方法的返回值還是需要接收的,要不然就沒有意義了,另外方法的返回值在接收的時候采用變量的方式接收,要求這個變量的數據類型和返回值類型一致(當然,也可以遵守自動類型轉換規則)。

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏