Java之Default關鍵字的兩種使用方式
Java關鍵字Default的兩種使用方法
其實之前一直都沒有關注過還有default
這關鍵字的存在,最近重新回溫《Java語言程序設計》這本書時,想總結(jié)總結(jié)常用的一些修飾符。偶然發(fā)現(xiàn)…嗯…是這樣的.
兩種使用方法:
據(jù)我觀察,總的來說,default
的用法不多,只有兩種:
- 在
switch
語句的時候使用default
- 在定義接口的時候使用
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é):
- 使用比較簡單,就是當case里的值與switch里的key沒有匹配的時候,執(zhí)行default里的方法。
- 在這里的例子中就是key為8,所以key與所有的case的值都不匹配,所以輸出星期天Sunday.
第二種使用方法
接口的定義IntefercaeDemo,定義一個接口,里面有兩個具體的方法,和一個抽象方法
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"); } //沒有實現(xiàn)的抽象方法 void sayHi(); }
- LearnDefault 實現(xiàn)IntefercaeDemo 接口。
LearnDefault .java
public class LearnDefault implements IntefercaeDemo{ //實現(xiàn)抽象方法 @Override public void sayHi() { System.out.println("this is sayHi mehtod"); } public static void main(String[] args) { //接口中被static所修飾的具體方法 IntefercaeDemo.showStatic(); //將實現(xiàn)了IntefercaeDemo的類實例化 LearnDefault learnDefault = new LearnDefault(); //被Default所修飾的具體方法可以通過引用變量來調(diào)用 learnDefault.showDefault(); } }
說明:
- JDK1.8中為了加強接口的能力,使得接口可以存在具體的方法,前提是方法需要被default或static關鍵字所修飾。
總結(jié):
- default修飾的目的是讓接口可以擁有具體的方法,讓接口內(nèi)部包含了一些默認的方法實現(xiàn)。
- 被default修飾的方法是接口的默認方法。既只要實現(xiàn)該接口的類,都具有這么一個默認方法,默認方法也可以被重寫。
- 我們可以想象這么一個場景,既實現(xiàn)某個接口的類都具有某個同樣的功能,如果像Java8以前的版本,那么每個實現(xiàn)類都需要寫一段重復的代碼去實現(xiàn)那個功能,顯得沒有必要。這就是存在的意義。
注意:
另外這里既然提到了接口的修飾符default,那么就要注意一點,如果一個類實現(xiàn)了兩個接口(可以看做是“多繼承”),這兩個接口又同時都包含了一個名字相同的default方法,那么會發(fā)生什么情況?
在這樣的情況下,編譯器是會報錯,得到一個編譯器錯誤,因為編譯器不知道應該在兩個同名的default方法中選擇哪一個,因此產(chǎn)生了二義性。
補充:容易混淆的地方
這里的關鍵字default不要跟平時我們在類中定義方法時,沒有加任何訪問修飾符時的(default)相混淆,它們的意義是不一樣的。
public class Demo{ //沒有訪問修飾符修飾,所以默認為(default) String name; void show(){} }
這里的(default)指的是一種場景,既類中成員沒有被訪問修飾符修飾,所以屬于(default)的情況,效果是(default)情況的成員只能在Demo類所在的包內(nèi)被訪問。
而本篇博文所說的default關鍵字是一個實實在在存在的關鍵字,是需要顯式聲明的,目前只有所說的兩種用法。與(default)場景毫無關系
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot+Thymeleaf+ECharts實現(xiàn)大數(shù)據(jù)可視化(基礎篇)
本文主要介紹了SpringBoot+Thymeleaf+ECharts實現(xiàn)大數(shù)據(jù)可視化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>2022-06-06java線程之使用Runnable接口創(chuàng)建線程的方法
本篇文章介紹了,java中使用Runnable接口創(chuàng)建線程的方法。需要的朋友參考下2013-05-05springboot利用aop實現(xiàn)接口異步(進度條)的全過程
我們在開發(fā)中,調(diào)用第三方接口時,往往是提交數(shù)據(jù),要異步去獲取數(shù)據(jù),下面這篇文章主要給大家介紹了關于springboot利用aop實現(xiàn)接口異步(進度條)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-01-01IDEA 連接數(shù)據(jù)庫的實現(xiàn)方法
這篇文章主要介紹了IDEA 連接數(shù)據(jù)庫的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10