最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java重載方法匹配優(yōu)先級(jí)的實(shí)現(xiàn)示例

 更新時(shí)間:2025年12月11日 09:53:26   作者:Java勸退師、  
本文通過(guò)一個(gè)示例詳細(xì)闡述了Java中方法重載的匹配優(yōu)先級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在我們學(xué)習(xí)Java的時(shí)候關(guān)于重載有個(gè)小的知識(shí)點(diǎn)叫方法重載匹配優(yōu)先級(jí)。雖然javac編譯器能確定方法的重載版本,但是在很多情況下重載的版本并不是唯一的,往往只能確定一個(gè)相對(duì)合適的版本。請(qǐng)看以下代碼你覺得輸出的內(nèi)容是什么呢?(可以先不要翻到代碼結(jié)束后的答案嘗試猜測(cè))

package cn.laoniu;

import java.io.Serializable;

public class Reload {

	public void sayType(Character arg) {
		System.out.println("Character");
	}

	public void sayType(long arg) {
		System.out.println("long");
	}

	public void sayType(char arg) {
		System.out.println("char");
	}

	public void sayType(char... arg) {
		System.out.println("char...");
	}

	public void sayType(Serializable arg) {
		System.out.println("Serializable");
	}

	public void sayType(int arg) {
		System.out.println("int");
	}

	public void sayType(Object arg) {
		System.out.println("Object");
	}

	public static void main(String[] args) {
		new Reload().sayType('a');
	}

}

上面代碼的運(yùn)行后輸出結(jié)果為:

char

這很好理解,'a'是一個(gè)char類型的數(shù)據(jù),自然會(huì)尋找參數(shù)類型為char的重載方法,如果注釋掉sayType(char arg)方法,那么輸出結(jié)果會(huì)變?yōu)椋?/p>

int

這時(shí)發(fā)生了一次自動(dòng)類型轉(zhuǎn)換,'a'除了可以代表一個(gè)字符串,還可以代表數(shù)字97(字符'a'的Unicode數(shù)值為十進(jìn)制數(shù)字97),因此參數(shù)類型為int的重載也是合適的。我們繼續(xù)注釋掉sayType(int arg)方法,那么輸出的結(jié)果會(huì)變?yōu)椋?/p>

long

這時(shí)發(fā)生了兩次類型轉(zhuǎn)換,'a'轉(zhuǎn)型為整數(shù)97之后,進(jìn)一步轉(zhuǎn)型為長(zhǎng)整數(shù)97L,匹配參數(shù)類型為long的重載。雖然上面代碼中沒有加入其他類型如float、double等的重載,在實(shí)際上自動(dòng)轉(zhuǎn)型還能繼續(xù)發(fā)生多次,按照char>int>long>float>double的順序進(jìn)行匹配,但是不會(huì)匹配到byte和short類型的重載,因?yàn)閏har到byte和short的轉(zhuǎn)型是不安全的。我們繼續(xù)注釋掉sayType(long arg)方法,那么輸出的結(jié)果變?yōu)椋?/p>

Character

這時(shí)發(fā)生了一次自動(dòng)裝箱,'a'被包裝為它的封裝類型java.lang.Character,所以匹配到了參數(shù)類型為Character的重載,繼續(xù)注釋掉sayType(Character arg)方法,那么輸出的結(jié)果會(huì)變?yōu)椋?/p>

Serializable

這個(gè)輸出可能會(huì)讓人感到疑惑,一個(gè)字符或數(shù)字與序列化有什么關(guān)系呢?出現(xiàn)Serializable是因?yàn)閖ava.lang.Serializable是java.lang.Character類實(shí)現(xiàn)的一個(gè)接口,當(dāng)自動(dòng)裝箱之后發(fā)現(xiàn)還是找不到裝箱類,但是找到了裝箱類所實(shí)現(xiàn)的接口類型,所以緊接著又發(fā)生了一次自動(dòng)轉(zhuǎn)型。char可以轉(zhuǎn)型為int,但是Character是絕對(duì)不會(huì)轉(zhuǎn)型為Integer的,它只能安全地轉(zhuǎn)型為它實(shí)現(xiàn)的借口或者父類。Character還實(shí)現(xiàn)了另外一個(gè)接口java.lang.Compara<Character>,如果同時(shí)出現(xiàn)兩個(gè)參數(shù)分別是Serializable和Compara<Character>的重載方法,那它們?cè)诖藭r(shí)的優(yōu)先級(jí)是一樣的。編譯器無(wú)法確定要自動(dòng)轉(zhuǎn)型為哪種類型,會(huì)提示“類型模糊”(Type Ambiguous),并拒絕編譯。讓我們繼續(xù)注釋掉sayType(Serializable arg)方法,輸出結(jié)果會(huì)變?yōu)椋?/p>

Object

這時(shí)是char裝箱后轉(zhuǎn)型為父類了,如果有多個(gè)父類,那么繼承關(guān)系從下往上搜索,越往上層優(yōu)先級(jí)越低。即便方法調(diào)用傳入?yún)?shù)值null時(shí),這個(gè)規(guī)則仍然適用。繼續(xù)把sayType(Object arg)方法注釋掉,結(jié)果會(huì)變?yōu)椋?/p>

char...

此時(shí)就剩下這一個(gè)方法了,可見變長(zhǎng)參數(shù)的重載優(yōu)先級(jí)是最低的。

補(bǔ)充

上面例子演示了Java重載方法優(yōu)先匹配級(jí)別,這也屬于java編譯期間選擇靜態(tài)分配目標(biāo)。這個(gè)例子是很極端的例子,除了作為面試題來(lái)為難應(yīng)聘者之外在實(shí)際工作中幾乎不存在任何價(jià)值

到此這篇關(guān)于Java重載方法匹配優(yōu)先級(jí)的實(shí)現(xiàn)那示例的文章就介紹到這了,更多相關(guān)Java重載方法匹配優(yōu)先級(jí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你搞懂Spring?AI核心接口,輕松對(duì)接所有大模型

    一文帶你搞懂Spring?AI核心接口,輕松對(duì)接所有大模型

    Spring?AI簡(jiǎn)單說(shuō)就是?Spring?官方為?Java?開發(fā)者打造的?AI?應(yīng)用開發(fā)框架,本文將從頂層?ChatClient?到底層?Model,逐層拆解?Spring?AI?的核心接口設(shè)計(jì),幫你徹底理清這套萬(wàn)能轉(zhuǎn)接頭的工作原理
    2026-05-05
  • springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明

    springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明

    這篇文章主要介紹了springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringMVC Restful api接口實(shí)現(xiàn)的代碼

    SpringMVC Restful api接口實(shí)現(xiàn)的代碼

    本篇文章主要介紹了SpringMVC Restful api接口實(shí)現(xiàn)的代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 一小時(shí)迅速入門Mybatis之增刪查改篇

    一小時(shí)迅速入門Mybatis之增刪查改篇

    這篇文章主要介紹了迅速入門Mybatis之增刪查改篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • JAVA控制流程break?continue的示例代碼

    JAVA控制流程break?continue的示例代碼

    JAVA流程控制中有相關(guān)代碼可以終止整個(gè)流程的進(jìn)程,他們就是(break和continue),本文通過(guò)實(shí)例代碼介紹下JAVA控制流程break?continue的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-03-03
  • Java volatile的適用場(chǎng)景實(shí)例詳解

    Java volatile的適用場(chǎng)景實(shí)例詳解

    在本文里我們給大家整理了一篇關(guān)于Java volatile的適用場(chǎng)景實(shí)例內(nèi)容和知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • 從零開始:快速入門SpringBoot注解的精髓

    從零開始:快速入門SpringBoot注解的精髓

    Spring?Boot是一個(gè)用于快速構(gòu)建基于Spring框架的應(yīng)用程序的開源框架,它通過(guò)使用注解來(lái)簡(jiǎn)化配置和開發(fā)過(guò)程,使開發(fā)人員能夠更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),Spring?Boot提供了許多注解,用于定義和配置應(yīng)用程序的各個(gè)方面,需要的朋友可以參考下
    2023-10-10
  • 圖文講解IDEA中根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類

    圖文講解IDEA中根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類

    這篇文章主要以圖文講解IDEA中根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成實(shí)體類,本文主要以Mysql數(shù)據(jù)庫(kù)為例,應(yīng)該會(huì)對(duì)大家有所幫助,如果有錯(cuò)誤的地方,還望指正
    2023-03-03
  • 深入理解Spring的事務(wù)傳播行為

    深入理解Spring的事務(wù)傳播行為

    spring特有的事務(wù)傳播行為,spring支持7種事務(wù)傳播行為,確定客戶端和被調(diào)用端的事務(wù)邊界(說(shuō)得通俗一點(diǎn)就是多個(gè)具有事務(wù)控制的service的相互調(diào)用時(shí)所形成的復(fù)雜的事務(wù)邊界控制),這篇文章主要給大家介紹了關(guān)于Spring事務(wù)傳播行為的相關(guān)資料,需要的朋友可以參考下。
    2018-02-02
  • 關(guān)于SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過(guò)濾器的問(wèn)題

    關(guān)于SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過(guò)濾器的問(wèn)題

    這篇文章主要介紹了SpringBoot創(chuàng)建存儲(chǔ)令牌的媒介類和過(guò)濾器的問(wèn)題,需要在配置文件中,添加JWT需要的密匙,過(guò)期時(shí)間和緩存過(guò)期時(shí)間,具體實(shí)例代碼參考下本文
    2021-09-09

最新評(píng)論

扬中市| 安庆市| 余庆县| 黄大仙区| 昭觉县| 罗江县| 右玉县| 社会| 西盟| 合川市| 东兴市| 阿拉善左旗| 通化市| 阿鲁科尔沁旗| 项城市| 阳信县| 黑河市| 调兵山市| 永胜县| 垫江县| 新昌县| 垫江县| 肃宁县| 广南县| 南郑县| 巨野县| 广汉市| 桂平市| 郁南县| 金乡县| 阜平县| 昆明市| 凯里市| 论坛| 门源| 杨浦区| 陵川县| 渭源县| 百色市| 平潭县| 三江|