Java之Default關(guān)鍵字的兩種使用方式
Java關(guān)鍵字Default的兩種使用方法
其實(shí)之前一直都沒有關(guān)注過還有default這關(guān)鍵字的存在,最近重新回溫《Java語言程序設(shè)計(jì)》這本書時(shí),想總結(jié)總結(jié)常用的一些修飾符。偶然發(fā)現(xiàn)…嗯…是這樣的.
兩種使用方法:
據(jù)我觀察,總的來說,default的用法不多,只有兩種:
- 在
switch語句的時(shí)候使用default - 在定義接口的時(shí)候使用
default來修飾具體的方法
第一種使用方法
代碼:
int day = 8;
String dayString;
switch (day) {
case 1: dayString = "Monday";
break;
case 2: dayString = "Tuesday";
break;
case 3: dayString = "Wednesday";
break;
case 4: dayString = "Thursday";
break;
case 5: dayString = "Friday";
break;
case 6: dayString = "Saturday";
break;
//如果case沒有匹配的值,那么肯定是星期日
default: dayString = "Sunday";
break;
}
System.out.println(dayString);總結(jié):
- 使用比較簡單,就是當(dāng)case里的值與switch里的key沒有匹配的時(shí)候,執(zhí)行default里的方法。
- 在這里的例子中就是key為8,所以key與所有的case的值都不匹配,所以輸出星期天Sunday.
第二種使用方法
接口的定義IntefercaeDemo,定義一個(gè)接口,里面有兩個(gè)具體的方法,和一個(gè)抽象方法
IntefercaeDemo .java
public interface IntefercaeDemo {
//具體方法
default void showDefault(){
System.out.println("this is showDefault method");
}
static void showStatic(){
System.out.println("this is showStatic method");
}
//沒有實(shí)現(xiàn)的抽象方法
void sayHi();
}- LearnDefault 實(shí)現(xiàn)IntefercaeDemo 接口。
LearnDefault .java
public class LearnDefault implements IntefercaeDemo{
//實(shí)現(xiàn)抽象方法
@Override
public void sayHi() {
System.out.println("this is sayHi mehtod");
}
public static void main(String[] args) {
//接口中被static所修飾的具體方法
IntefercaeDemo.showStatic();
//將實(shí)現(xiàn)了IntefercaeDemo的類實(shí)例化
LearnDefault learnDefault = new LearnDefault();
//被Default所修飾的具體方法可以通過引用變量來調(diào)用
learnDefault.showDefault();
}
}說明:
- JDK1.8中為了加強(qiáng)接口的能力,使得接口可以存在具體的方法,前提是方法需要被default或static關(guān)鍵字所修飾。
總結(jié):
- default修飾的目的是讓接口可以擁有具體的方法,讓接口內(nèi)部包含了一些默認(rèn)的方法實(shí)現(xiàn)。
- 被default修飾的方法是接口的默認(rèn)方法。既只要實(shí)現(xiàn)該接口的類,都具有這么一個(gè)默認(rèn)方法,默認(rèn)方法也可以被重寫。
- 我們可以想象這么一個(gè)場(chǎng)景,既實(shí)現(xiàn)某個(gè)接口的類都具有某個(gè)同樣的功能,如果像Java8以前的版本,那么每個(gè)實(shí)現(xiàn)類都需要寫一段重復(fù)的代碼去實(shí)現(xiàn)那個(gè)功能,顯得沒有必要。這就是存在的意義。
注意:
另外這里既然提到了接口的修飾符default,那么就要注意一點(diǎn),如果一個(gè)類實(shí)現(xiàn)了兩個(gè)接口(可以看做是“多繼承”),這兩個(gè)接口又同時(shí)都包含了一個(gè)名字相同的default方法,那么會(huì)發(fā)生什么情況?
在這樣的情況下,編譯器是會(huì)報(bào)錯(cuò),得到一個(gè)編譯器錯(cuò)誤,因?yàn)榫幾g器不知道應(yīng)該在兩個(gè)同名的default方法中選擇哪一個(gè),因此產(chǎn)生了二義性。
補(bǔ)充:容易混淆的地方
這里的關(guān)鍵字default不要跟平時(shí)我們?cè)陬愔卸x方法時(shí),沒有加任何訪問修飾符時(shí)的(default)相混淆,它們的意義是不一樣的。
public class Demo{
//沒有訪問修飾符修飾,所以默認(rèn)為(default)
String name;
void show(){}
}
這里的(default)指的是一種場(chǎng)景,既類中成員沒有被訪問修飾符修飾,所以屬于(default)的情況,效果是(default)情況的成員只能在Demo類所在的包內(nèi)被訪問。
而本篇博文所說的default關(guān)鍵字是一個(gè)實(shí)實(shí)在在存在的關(guān)鍵字,是需要顯式聲明的,目前只有所說的兩種用法。與(default)場(chǎng)景毫無關(guān)系
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+Thymeleaf+ECharts實(shí)現(xiàn)大數(shù)據(jù)可視化(基礎(chǔ)篇)
本文主要介紹了SpringBoot+Thymeleaf+ECharts實(shí)現(xiàn)大數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2022-06-06
java線程之使用Runnable接口創(chuàng)建線程的方法
本篇文章介紹了,java中使用Runnable接口創(chuàng)建線程的方法。需要的朋友參考下2013-05-05
java發(fā)送http get請(qǐng)求的兩種方式
這篇文章主要為大家詳細(xì)介紹了java發(fā)送http get請(qǐng)求的兩種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
SWT(JFace)體驗(yàn)之圓環(huán)狀(戒指型)
SWT(JFace)體驗(yàn)之圓環(huán)狀(戒指型)實(shí)現(xiàn)代碼。2009-06-06
springboot利用aop實(shí)現(xiàn)接口異步(進(jìn)度條)的全過程
我們?cè)陂_發(fā)中,調(diào)用第三方接口時(shí),往往是提交數(shù)據(jù),要異步去獲取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot利用aop實(shí)現(xiàn)接口異步(進(jìn)度條)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
IDEA 連接數(shù)據(jù)庫的實(shí)現(xiàn)方法
這篇文章主要介紹了IDEA 連接數(shù)據(jù)庫的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
IDEA如何修改項(xiàng)目名稱出現(xiàn)中括號(hào)
當(dāng)項(xiàng)目文件夾名稱與model名稱不一致時(shí),IDEA會(huì)在項(xiàng)目名旁顯示中括號(hào)以區(qū)分,修改項(xiàng)目名稱時(shí)出現(xiàn)中括號(hào)問題,通常是因?yàn)镮DE中model名與文件夾名不同步,解決方法是統(tǒng)一model名稱和文件夾名稱,可通過重構(gòu)功能或項(xiàng)目結(jié)構(gòu)設(shè)置完成,重命名操作應(yīng)謹(jǐn)慎,以避免路徑等引用錯(cuò)誤2024-10-10

