大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java教程
Java標(biāo)識(shí)符與關(guān)鍵字
Java變量
Java數(shù)據(jù)類型
Java運(yùn)算符
Java控制語(yǔ)句
Java方法

Java方法返回值詳解

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

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

關(guān)于方法的返回值在使用的時(shí)候有哪些注意事項(xiàng)呢,我們來(lái)看幾段代碼:

public static int method1(){
	
}

以上程序在編譯的時(shí)候,報(bào)錯(cuò)了,錯(cuò)誤信息是“缺少返回語(yǔ)句”,為什么呢?這是因?yàn)樵摲椒ㄔ诼暶鞯臅r(shí)候指定了方法結(jié)束之后返回int類型的數(shù)據(jù),但是以上方法體中并沒(méi)有編寫“返回?cái)?shù)據(jù)”的代碼。也就是說(shuō)當(dāng)一個(gè)方法在聲明的時(shí)候返回值類型不是void的情況下,要求方法體中必須有負(fù)責(zé)“返回?cái)?shù)據(jù)”的語(yǔ)句。這樣的語(yǔ)句怎么寫呢?答案是:“return 數(shù)據(jù);”(大家還記得第六章節(jié)控制語(yǔ)句中的返回語(yǔ)句嗎?這個(gè)就是),并且要求這個(gè)“數(shù)據(jù)”的類型要和聲明的返回值類型一致,要不然編譯器就會(huì)報(bào)錯(cuò)了。代碼這樣寫就沒(méi)問(wèn)題了:

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!");
}

編譯以上程序,我們可以看到編譯器報(bào)錯(cuò)了,提示的錯(cuò)誤信息是:“System.out.println("hello world!");”這行代碼是無(wú)法訪問(wèn)的語(yǔ)句。這是為什么呢?因?yàn)樵诜椒ㄖ腥绻坏﹫?zhí)行了帶有“return”關(guān)鍵字的語(yǔ)句,此方法就會(huì)結(jié)束,所以以上的程序中“System.out.println("hello world!");”這行代碼是永遠(yuǎn)無(wú)法執(zhí)行到的,所以編譯報(bào)錯(cuò)了。得到的結(jié)論是:帶有return關(guān)鍵字的語(yǔ)句只要執(zhí)行,所在的方法則執(zhí)行結(jié)束。

那這樣寫呢?

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

還是編譯報(bào)錯(cuò),錯(cuò)誤信息是“缺少返回語(yǔ)句”,為什么呢?實(shí)際上方法在聲明的時(shí)候指定了返回值類型為int類型,java語(yǔ)法則要求方法必須能夠“百分百的保證”在結(jié)束的時(shí)候返回int類型的數(shù)據(jù),以上程序“return 1;”出現(xiàn)在if語(yǔ)句的分支當(dāng)中,對(duì)于編譯器來(lái)說(shuō),它只知道“return 1;”有可能執(zhí)行,也有可能不執(zhí)行,所以java編譯器報(bào)錯(cuò)了,不允許程序員這樣編寫代碼。來(lái)看以下代碼:

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

這樣就能編譯通過(guò)了,為什么呢?這是因?yàn)榫幾g器能夠檢測(cè)出以上的if..else..語(yǔ)句必然會(huì)有一個(gè)分支執(zhí)行,這樣就不缺少返回語(yǔ)句了。其實(shí)以上代碼也可以這樣寫:

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

以上代碼也可以達(dá)到同樣的效果,因?yàn)?ldquo;return 1;”如果不執(zhí)行,則一定會(huì)執(zhí)行“return 0;”,當(dāng)然,如果執(zhí)行了“return 1;”則方法一定會(huì)結(jié)束,“return 0;”也就沒(méi)有執(zhí)行的機(jī)會(huì)了。再看下面的代碼:

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行");
}

以上程序還是編譯報(bào)錯(cuò),哪里出錯(cuò)了,為什么呢?其中“第1行”和“第3行”代碼沒(méi)有執(zhí)行機(jī)會(huì),編譯報(bào)錯(cuò),但“第2行”是有執(zhí)行機(jī)會(huì)的。通過(guò)以上程序我們可以得出這樣的結(jié)論:在同一個(gè)“域”中,“return”語(yǔ)句后面是不能寫任何代碼的,因?yàn)樗鼰o(wú)法執(zhí)行到。

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

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

所以,一個(gè)功能的實(shí)現(xiàn),代碼可以寫很多種不同的方式,慢慢培養(yǎng)吧同學(xué)們,這需要一個(gè)過(guò)程,千萬(wàn)戒驕戒躁。我們接著看關(guān)于返回值還有哪些注意事項(xiàng):

public static void method2(){
	return 10;
}

以上代碼編譯報(bào)錯(cuò),為什么呢?這是因?yàn)橐粋€(gè)方法在聲明的時(shí)候返回值類型定義為void,這就表示該方法執(zhí)行結(jié)束的時(shí)候不能返回任何數(shù)據(jù),而以上程序中編寫了“return 10;”這樣的代碼,自然編譯器會(huì)報(bào)錯(cuò)的。也就是說(shuō)前后說(shuō)法要一致,聲明的時(shí)候有返回值,那么代碼編寫的時(shí)候就必須有“return 值;”這樣的語(yǔ)句。如果聲明的時(shí)候沒(méi)有返回值,那么方法結(jié)束的時(shí)候就不能編寫“return 值;”這樣的語(yǔ)句。那么,大家再來(lái)看看以下的代碼:

public static void method2(){
	return;
}

經(jīng)過(guò)測(cè)試,以上的代碼編譯通過(guò)了,也就是說(shuō)當(dāng)一個(gè)方法的返回值類型是void的時(shí)候,方法體當(dāng)中允許出現(xiàn)“return;”語(yǔ)句(注意:不允許出現(xiàn)“return 值;”),這個(gè)語(yǔ)法的作用主要是用來(lái)終止方法的執(zhí)行。當(dāng)一個(gè)方法的返回值類型是void的時(shí)候,在方法執(zhí)行過(guò)程中,如果滿足了某個(gè)條件,則這個(gè)方法可能就沒(méi)必要往下繼續(xù)執(zhí)行了,想終止這個(gè)方法的執(zhí)行,此時(shí)執(zhí)行“return;”就行了。有一些同學(xué)在最初的學(xué)習(xí)過(guò)程中,對(duì)break和return認(rèn)識(shí)的不夠清晰,我們來(lái)研究一下,請(qǐng)看以下代碼:

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!");
}

運(yùn)行結(jié)果如下圖所示:

break測(cè)試

圖7-4:break測(cè)試

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!");
}

運(yùn)行結(jié)果如下圖所示:

return測(cè)試

圖7-5:return測(cè)試

通過(guò)以上的測(cè)試,我們可以得出break和return根本不是一個(gè)級(jí)別的,break用來(lái)終止循環(huán),return用來(lái)終止一個(gè)方法的執(zhí)行。接下來(lái)再看一段代碼:

public static int method3(){
	return;
}

經(jīng)過(guò)測(cè)試,以上代碼編譯報(bào)錯(cuò),錯(cuò)誤信息是:缺少返回值,為什么呢?這是因?yàn)榉椒ㄔ诼暶鞯臅r(shí)候規(guī)定了返回int類型的值,但是在方法體當(dāng)中執(zhí)行了“return;”語(yǔ)句,并沒(méi)有返回具體的值,所以“return;”只能出現(xiàn)在返回值類型是void的方法中。

接下來(lái)我們來(lái)看看,當(dāng)一個(gè)方法執(zhí)行結(jié)束之后怎么接收這個(gè)返回值呢?請(qǐng)看下面代碼:

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

運(yùn)行結(jié)果如下圖所示:

Java編程開(kāi)發(fā)

圖7-6:測(cè)試怎么接收返回值

通過(guò)以上的測(cè)試我們得知,方法執(zhí)行結(jié)束之后的返回值我們可以接收,也可以不接收,不是必須的,但大多數(shù)情況下方法的返回值還是需要接收的,要不然就沒(méi)有意義了,另外方法的返回值在接收的時(shí)候采用變量的方式接收,要求這個(gè)變量的數(shù)據(jù)類型和返回值類型一致(當(dāng)然,也可以遵守自動(dòng)類型轉(zhuǎn)換規(guī)則)。

主站蜘蛛池模板: 久久久久久极精品久久久 | 色人久久| 国产成人精品综合久久久软件 | 亚洲视频91 | 国产视频日本 | 欧美图片一区二区三区 | 欧美日韩免费大片 | 999视频网| 毛片电| 亚洲一区二区三区成人 | 国产精品久久久久久久久久日本 | 欧美午夜视频 | 亚洲综合视频 | 国产一区二区免费在线 | 免费在线观看一级片 | 羞羞视频在线免费 | 情趣色视频网站 | 日韩国产精品欧美一区二区 | 久久久噜噜噜久久老司机 | 欧美大片毛片大片 | 女人大毛片一级毛片一 | 香蕉久久高清国产精品免费 | 免费观看a黄一级视频 | 久久一 | 综合图区亚洲白拍在线 | 四虎网站在线播放 | 一级成人生活片免费看 | 天天操狠狠 | 成人aa在线观看视频 | 欧美国产一区二区 | 91精品推荐 | 思思91精品国产综合在线 | 第一区免费在线观看 | 大乳欲妇三级一区二区三区 | 国产综合社区 | 欧美色综合 | 免费h片在线观看网址最新 免费v片在线观看无遮挡 | 国产精品推荐 | 久久激情五月 | 亚洲欧美一区二区久久 | 欧美国产一区二区 |