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

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

Java方法重載

關(guān)于方法重載是什么,以及怎么進(jìn)行重載,這些我們目前先不去研究,先來(lái)看看以下代碼不使用方法重載機(jī)制,存在哪些缺點(diǎn)?

public static void main(String[] args) {
	int x1 = 10;
	int x2 = 20;
	int retValue1 = sumInt(x1 , x2);
	System.out.println(x1 + "+" + x2 + "=" + retValue1);
	long y1 = 10L;
	long y2 = 20L;
	long retValue2 = sumLong(y1 , y2);
	System.out.println(y1 + "+" + y2 + "=" + retValue2);
	double z1 = 10.0;
	double z2 = 20.0;
	double retValue3 = sumDouble(z1, z2);
	System.out.println(z1 + "+" + z2 + "=" + retValue3);
}
public static int sumInt(int a , int b){
	return a + b;
}
public static long sumLong(long a , long b){
	return a + b;
}
public static double sumDouble(double a , double b){
	return a + b;
}

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

Java技術(shù)架構(gòu)

圖7-12:沒(méi)有重載,分析缺點(diǎn)

我們可以看到以上三個(gè)方法功能“相似”,都是求和,只不過(guò)參與求和的數(shù)據(jù)類(lèi)型不同,因此定義了三個(gè)方法,分別起了三個(gè)不同的方法名。這種方式會(huì)增加程序員編程的壓力,因?yàn)槌绦騿T起碼要記憶三個(gè)方法名,另外代碼也不是很美觀。怎么解決呢?我們來(lái)看看使用方法重載機(jī)制之后會(huì)是怎樣,請(qǐng)看以下代碼以及運(yùn)行結(jié)果:

public static void main(String[] args) {
	int x1 = 10;
	int x2 = 20;
	int retValue1 = sum(x1 , x2);
	System.out.println(x1 + "+" + x2 + "=" + retValue1);
	long y1 = 10L;
	long y2 = 20L;
	long retValue2 = sum(y1 , y2);
	System.out.println(y1 + "+" + y2 + "=" + retValue2);
	double z1 = 10.0;
	double z2 = 20.0;
	double retValue3 = sum(z1, z2);
	System.out.println(z1 + "+" + z2 + "=" + retValue3);
}
public static int sum(int a , int b){
	return a + b;
}
public static long sum(long a , long b){
	return a + b;
}
public static double sum(double a , double b){
	return a + b;
}

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

Java應(yīng)用

圖7-13:使用重載機(jī)制

以上代碼使用了方法重載機(jī)制,我們可以看到,三個(gè)“功能相似”的方法名字都叫做sum,只不過(guò)方法的形參不同,這樣對(duì)于程序員來(lái)說(shuō),調(diào)用方法時(shí)所需要記憶的方法名更少一些,代碼更加美觀一些。

接下來(lái)我們正式的研究一下方法的重載機(jī)制:什么是方法重載?什么情況下我們考慮使用方法重載?在代碼角度來(lái)看,滿(mǎn)足什么條件的時(shí)候構(gòu)成方法重載?

那么,什么是方法重載呢?方法重載(overload)是指在一個(gè)類(lèi)中定義多個(gè)同名的方法,但要求每個(gè)方法具有不同的參數(shù)的類(lèi)型或參數(shù)的個(gè)數(shù)。調(diào)用重載方法時(shí),Java編譯器能通過(guò)檢查調(diào)用的方法的參數(shù)類(lèi)型和個(gè)數(shù)選擇一個(gè)恰當(dāng)?shù)姆椒ā7椒ㄖ剌d通常用于創(chuàng)建完成一組任務(wù)相似但參數(shù)的類(lèi)型或參數(shù)的個(gè)數(shù)不同的方法。調(diào)用方法時(shí)通過(guò)傳遞給它們的不同個(gè)數(shù)和類(lèi)型的實(shí)參來(lái)決定具體使用哪個(gè)方法。

什么情況下我們考慮使用方法重載呢?在同一個(gè)類(lèi)當(dāng)中,如果多個(gè)功能是相似的,可以考慮將它們的方法名定義的一致,使用方法重載機(jī)制,這樣便于程序員的調(diào)用,以及代碼美觀,但相反,如果兩個(gè)方法所完成的功能完全不同,那么方法名也一定要不一樣,這樣才是合理的。

代碼滿(mǎn)足什么條件的時(shí)候構(gòu)成方法重載呢?滿(mǎn)足以下三個(gè)條件:

● 在同一個(gè)類(lèi)當(dāng)中。

● 方法名相同。

● 參數(shù)列表不同:個(gè)數(shù)不同算不同,順序不同算不同,類(lèi)型不同也算不同。

接下來(lái)我們來(lái)看看以下程序哪些方法構(gòu)成了方法重載,哪些沒(méi)有:

Java編程

圖7-14:哪些方法重載了,哪些沒(méi)有

編譯結(jié)果如下圖所示:

Java系統(tǒng)開(kāi)發(fā)

圖7-15:編譯錯(cuò)誤信息提示

通過(guò)觀察以上代碼以及測(cè)試結(jié)果我們得知,方法5和方法4是一樣的,這不是方法重載,這叫“方法重復(fù)(哈哈)”,因?yàn)橹拔覀兙驼f(shuō)過(guò)方法形參中起決定性作用的是參數(shù)的數(shù)據(jù)類(lèi)型,參數(shù)的名字隨意,因?yàn)槊恳粋€(gè)形參都是局部變量,變量名自然是隨意的。其中方法6和方法1相同,顯然方法的重載和方法的返回值類(lèi)型沒(méi)有關(guān)系,這也是合理的,因?yàn)橹拔覀兲徇^(guò),方法執(zhí)行結(jié)束之后的返回值我們可以接收也可以不接收。另外方法7和方法1也無(wú)法構(gòu)成重載,顯然方法重載和修飾符無(wú)關(guān)。

總之,方法1和方法2要想構(gòu)成方法重載,首先它們?cè)谕粋€(gè)類(lèi)當(dāng)中,方法名一樣,參數(shù)列表不同(類(lèi)型、個(gè)數(shù)、順序),這樣java虛擬機(jī)在運(yùn)行的時(shí)候就可以分清楚去調(diào)用哪個(gè)方法了。其實(shí),最終要調(diào)用哪個(gè)方法,還是取決于調(diào)用的時(shí)候傳遞的實(shí)際參數(shù)列表。所以在java編程中要區(qū)分兩個(gè)方法,首先看方法名,如果方法名一致,則繼續(xù)看它們的形式參數(shù)列表。

接下來(lái)我們來(lái)看一下方法重載在實(shí)際開(kāi)發(fā)中的應(yīng)用,你有沒(méi)有覺(jué)得每一次輸出的時(shí)候“System.out.println();”這行代碼很麻煩,我們來(lái)封裝一個(gè)工具類(lèi),請(qǐng)看以下代碼:

public class U {
public static void p(){
	System.out.println();
}
public static void p(int data){
	System.out.println(data);
}
public static void p(long data){
	System.out.println(data);
}
public static void p(float data){
	System.out.println(data);
}
public static void p(double data){
	System.out.println(data);
}
public static void p(boolean data){
	System.out.println(data);
}
public static void p(char data){
	System.out.println(data);
}
public static void p(String data){
	System.out.println(data);
}
}
public class UTest {
	public static void main(String[] args) {
		U.p("hello world!");
		U.p(10);
		U.p(9.0);
		U.p(false);
		U.p('國(guó)');
		int a = 10;
		int b = 20;
		int c = a + b;
		U.p(a + "+" + b + "=" + c);
	}
}

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

測(cè)試工具類(lèi)

圖7-16:測(cè)試工具類(lèi)U

看到以上的代碼,你是不是感覺(jué)以后要打印數(shù)據(jù)到控制臺(tái)就很方便了,代碼再也不需要寫(xiě)這么多“System.out.println();”,你只需要“U.p();”,當(dāng)然,你需要把U.java文件編譯生成的U.class文件拷貝到你的硬盤(pán)當(dāng)中,一直攜帶著,什么時(shí)候需要的話,把U.class文件放到classpath當(dāng)中就可以使用了。

主站蜘蛛池模板: 91午夜精品亚洲一区二区三区 | 国产精品视频一区二区三区经 | 日日碰狠狠添天天爽对白 | 一本色道久久综合亚洲精品高清 | 国产网站免费视频 | 高清一区二区三区免费 | 日日撸夜夜撸网站 | 久久精品99视频 | 久青草香蕉精品视频在线 | 日本高清一级做a爱过程免费视频 | 四虎免费看黄 | 国产成人久久综合热 | 91在线视频免费 | 国产自产拍精品视频免费看 | 草草影院1 | 青青青国产免费全部免费观看 | 成人久久久久 | 99re5在线精品视频热线 | 国产一区二区三区高清视频 | 亚洲精品一区二区三区五区 | 国产不卡影院 | 黄色短视频在线播放 | 国产精品一区二区三区免费视频 | 女人寂寞偷人视频a级 | 97影院理论片在线观看 | 久久久精品午夜免费不卡 | 91视频专区 | 一级毛片播放 | 欧美日韩高清在线观看一区二区 | 成人区在线观看免费视频 | 日本私人影院 | 亚洲久久在线观看 | 日韩中文字幕视频 | 国产激情久久久久影 | 男人影院在线观看 | 热99re久久精品2久久久 | 国产精品白丝喷水在线观看 | 在线观看中文字幕国产 | 中文字幕av一区 | 99在线免费观看视频 | 99久久久无码国产精品 |