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

Java零基礎(chǔ)也看得懂的單例模式與final及抽象類和接口詳解

 更新時(shí)間:2022年05月10日 11:10:26   作者:小學(xué)生??!  
本文主要講了單例模式中的餓漢式和懶漢式的區(qū)別,final的使用,抽象類的介紹以及接口的具體內(nèi)容,感興趣的朋友來看看吧

1.單例模式

1.餓漢式和懶漢式的實(shí)現(xiàn)

步驟:

  • 將構(gòu)造器私有化
  • 類的內(nèi)部創(chuàng)建對象
  • 向外暴露一個(gè)靜態(tài)的公共方法

2.餓漢式

class School1 {
    //餓漢式
    private String name;
    //在類的內(nèi)部直接創(chuàng)建對象
    private static School1 sc = new School1("清華大學(xué)");
    //將構(gòu)造器私有化
    private School1(String name) {
        this.name = name;
    }
    //提供一個(gè)公共的static方法返回對象
    public static School getInstance() {
        return sc;
    }
}

3.懶漢式

class School2 {
    //懶漢式
    private String name;
    //在類的內(nèi)部直接創(chuàng)建對象
    private static School2 sc;
    //將構(gòu)造器私有化
    private School2(String name) {
        this.name = name;
    }
    //提供一個(gè)公共的static方法返回對象
    //若對象為null創(chuàng)建對象否則直接返回對象
    public static School2 getInstance() {
        if (sc == null) {
            sc = new School2("清華大學(xué)");
        }
        return sc;
    }
}

4.懶漢式和餓漢式的區(qū)別

  • 創(chuàng)建對象的時(shí)機(jī)不同:餓漢式在類加載是就創(chuàng)建了對象,懶漢式是在使用時(shí)再創(chuàng)建。
  • 餓漢式不存在線程安全問題,懶漢式存在線程安全問題。
  • 餓漢式在類加載是就創(chuàng)建了對象所以存在資源浪費(fèi)的問題,但懶漢式就不存在這個(gè)問題。

2.final的使用

1.基本介紹

final可以修飾類,屬性,方法和局部變量。

2.使用場景

①當(dāng)不希望父類被繼承。

②當(dāng)不希望父類的方法被子類重寫。

③當(dāng)不希望類的某個(gè)屬性被修改

④當(dāng)不希望某個(gè)局部變量被修改

final class A{};//當(dāng)不希望父類被繼承。
class B{
    public final void display(){};//當(dāng)不希望父類的方法被子類重寫。
    public final int A_B = 10;//當(dāng)不希望類的某個(gè)屬性被修改
    public void show(){
        final int A_c = 20;//當(dāng)不希望某個(gè)局部變量被修改
    }
}

3.使用注意事項(xiàng)和細(xì)節(jié)討論

1.final修飾的屬性又叫常量,一般用 XX_XX

2.final修飾的屬性定義時(shí),必須在以下位置賦初值

①定義時(shí)直接賦值。

②在構(gòu)造器中賦值。

③在代碼塊中賦值。(普通屬性在普通代碼塊初始化,靜態(tài)屬性在靜態(tài)代碼塊初始化)

class A {
//  定義時(shí)直接賦值。
    public final  int a = 10;
//    {
//        a = 10;//在代碼塊中賦值。
//    }
//
//    public A() {
//        a = 10;//在構(gòu)造器中賦值。
//    }
}

3.如果final修飾的屬性是static,則初始化的為位置只能是

①定義時(shí)直接賦值。

②在靜態(tài)代碼塊中賦值。

class A {
//  定義時(shí)直接賦值。
    public final static int a = 10;
//    static {
//        a = 10;//在靜態(tài)代碼塊中賦值。
//    }
//    public A() {
//   final修飾的屬性是static,則初始化的為位置不能是構(gòu)造器
//        a = 10;
//    }
}

4.final類不能繼承,但可以實(shí)例化對象。

5.final修飾的方法雖然不能重寫,但可以被繼承。

6.final不能修飾構(gòu)造器。

7.final 和 static 搭配使用,不會導(dǎo)致類的加載,效率更高。

8.包裝類(Integer,Double,Float,Boolean,String等都是final修飾的)

3.抽象類

1.基本介紹

用abstract關(guān)鍵字修飾的類叫抽象類,abstract還可以用來修飾一個(gè)方法,即抽象類。

abstract class A{   
    abstract void display();
    //當(dāng)一個(gè)類中有一個(gè)抽象方法,這個(gè)類也要定義為抽象類
}

2.使用注意事項(xiàng)和細(xì)節(jié)討論

1.抽象類不能被實(shí)例化。

2.抽象類可以沒有abstract方法。

3.當(dāng)一個(gè)類中有一個(gè)抽象方法,這個(gè)類也要定義為抽象類。

4.abstract只能修飾類和方法,不能修飾屬性和其他。

5.抽象類可以有任意成員,但抽象方法不能有實(shí)現(xiàn)主體。

6.如果一個(gè)類繼承了抽象類,則必須要實(shí)現(xiàn)抽象類的所有方法。

7.抽象方法不能用private,static,final來修飾,因?yàn)檫@些關(guān)鍵字與重寫相違背

4.接口

1.基本介紹

interface 接口名{
    //屬性
    //方法(可以為抽象方法,靜態(tài)方法,默認(rèn)方法)
    //在JDk7.0之前接口的所有方法都為抽象方法
}
class 類名 implements 接口{
    自己屬性;
    自己方法;
    必須實(shí)現(xiàn)的接口的抽象方法;

}

public interface UsbInterface {
    int a = 10;//實(shí)際上是public final static int a = 10;
    void connect();
    void close();//抽象方法
    default public void display(){//默認(rèn)方法
        System.out.println("接口中的方法被調(diào)用~");
    }
    public static void show(){//靜態(tài)方法
        System.out.println("接口中的靜態(tài)方法被調(diào)用~");
    }
}

2.注意事項(xiàng)和細(xì)節(jié)討論

1.接口不能被實(shí)例化

2.接口中所有的方法時(shí) public 方法,接口中抽象方法,可以不用 abstract 修飾

3.一個(gè)普通類實(shí)現(xiàn)接口。就必須將該接口的所有方法都實(shí)現(xiàn),可以使用alt+enter來解決

4.抽象類去實(shí)現(xiàn)接口時(shí),可以不實(shí)現(xiàn)接口的抽象方法。

5.當(dāng)一個(gè)類實(shí)現(xiàn)了一個(gè)接口,這個(gè)類就可以調(diào)用接口中的所有屬性和默認(rèn)方法,但不能調(diào)用接口中的靜態(tài)方法。

public class MySql implements UsbInterface{
    @Override
    public void connect() {
        System.out.println("MySql被調(diào)用");
        display();
        System.out.println(a);
    }
    @Override
    public void close() {
        System.out.println("MySql被關(guān)閉");
    }
}

3.實(shí)現(xiàn)接口與繼承的區(qū)別

1.繼承是將父類的所有繼承過來,子類天生就擁有父類的所有屬性,實(shí)現(xiàn)接口就像是后天學(xué)習(xí)其他的沒有的技能。

2.繼承的價(jià)值主要在于:解決代碼的復(fù)用性和可維護(hù)性。

3.接口的價(jià)值主要在于:設(shè)計(jì)規(guī)范。更加靈活。

4.繼承是滿足is-a的關(guān)系,接口只需滿足like-a的關(guān)系。

5.接口在一定程度上實(shí)現(xiàn)了代碼解耦。

4.接口與繼承同時(shí)出現(xiàn)如何訪問屬性

public class Interface01 {
}
interface A{
    int x = 10;
}
class B {
    int x = 20;
}
class C extends B implements A{
    public void display(){
        System.out.println( A.x + "+" + super.x );
    }
    //接口的屬性直接通過接口名訪問,父類通過super訪問
    public static void main(String[] args) {
        new C().display();
    }
}

5.接口的多態(tài)特性

1.多態(tài)參數(shù)

接口可以接受不同的對象,接口的引用也可以指向?qū)崿F(xiàn)了接口的類的對象。

public class InterfaceDetails {
    public static void main(String[] args) {
        MySql mySql = new MySql();
        Oracle oracle = new Oracle();
        t(mySql);
        t(oracle);
       UsbInterface UIf = mySql;
    }
    public static void t(UsbInterface mb) {
        mb.close();
        mb.connect();
    }
}

2.多態(tài)數(shù)組

public interface UsbInterface {
    void work();
}
public class Phone implements UsbInterface{
    @Override
    public void work() {
        System.out.println("手機(jī)正在工作。。。");
    }
    public void call(){
        System.out.println("手機(jī)正在打電話。。。");
    }
}
public class Camera implements UsbInterface{
    @Override
    public void work() {
        System.out.println("相機(jī)正在工作。。。");
    }
}
public class Interface02 {
    public static void main(String[] args) {
        UsbInterface[] uIF = new  UsbInterface[2];
        Phone phone = new Phone();
        Camera camera = new Camera();
        uIF[0]= phone;
        uIF[1]= camera;
        for (int i = 0; i < 2; i++) {
            uIF[i].work();
            if(uIF[i] instanceof Phone){
                ((Phone) uIF[i]).call();
            }
        }
    }
}

3.接口存在多態(tài)傳遞現(xiàn)象

interface AA{
    void display();
}
interface BB extends AA{
}
class CC implements BB{
    @Override
    public void display() {
    }
} 

到此這篇關(guān)于Java零基礎(chǔ)也看得懂的單例模式與final及抽象類和接口詳解的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java線程池7個(gè)參數(shù)的詳細(xì)含義

    Java線程池7個(gè)參數(shù)的詳細(xì)含義

    java多線程開發(fā)時(shí),常常用到線程池技術(shù),這篇文章是對創(chuàng)建java線程池時(shí)的七個(gè)參數(shù)的詳細(xì)解釋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java Native關(guān)鍵字原理及作用解析

    Java Native關(guān)鍵字原理及作用解析

    這篇文章主要介紹了Java Native關(guān)鍵字原理及作用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringMVC實(shí)現(xiàn)文件上傳與下載、攔截器、異常處理器等功能

    SpringMVC實(shí)現(xiàn)文件上傳與下載、攔截器、異常處理器等功能

    這篇文章主要給大家介紹了關(guān)于SpringMVC實(shí)現(xiàn)文件上傳與下載、攔截器、異常處理器等功能的相關(guān)資料,這些功能在我們?nèi)粘i_發(fā)中經(jīng)常會遇到,本文通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • OpenCV在Android上的應(yīng)用示例

    OpenCV在Android上的應(yīng)用示例

    這篇文章主要介紹了OpenCV在Android上的應(yīng)用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 實(shí)例解析使用Java實(shí)現(xiàn)基本的音頻播放器的編寫要點(diǎn)

    實(shí)例解析使用Java實(shí)現(xiàn)基本的音頻播放器的編寫要點(diǎn)

    這篇文章主要介紹了使用Java實(shí)現(xiàn)基本的音頻播放器的代碼要點(diǎn)實(shí)例分享,包括音頻文件的循環(huán)播放等功能實(shí)現(xiàn)的關(guān)鍵點(diǎn),需要的朋友可以參考下
    2016-01-01
  • 使用Java方法配置Spring代碼解析

    使用Java方法配置Spring代碼解析

    這篇文章主要介紹了使用Java方法配置Spring代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決

    mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決

    這篇文章主要介紹了mybatis-plus3.4.0邏輯刪除報(bào)錯(cuò)的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java中的取余與取模運(yùn)算概念、區(qū)別代碼實(shí)踐

    Java中的取余與取模運(yùn)算概念、區(qū)別代碼實(shí)踐

    這篇文章主要介紹了Java中的取余與取模運(yùn)算概念、區(qū)別代碼實(shí)踐,需要的朋友可以參考下
    2007-02-02
  • 舉例講解Java編程中this關(guān)鍵字與super關(guān)鍵字的用法

    舉例講解Java編程中this關(guān)鍵字與super關(guān)鍵字的用法

    這篇文章主要介紹了Java編程中this關(guān)鍵字與super關(guān)鍵字的用法示例,super是this的父輩,在繼承過程中兩個(gè)關(guān)鍵字經(jīng)常被用到,需要的朋友可以參考下
    2016-03-03
  • Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解

    Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解

    這篇文章主要為大家介紹了Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07

最新評論

镇巴县| 苏尼特右旗| 伽师县| 信阳市| 黎川县| 佛学| 清涧县| 清远市| 浙江省| 和平区| 那坡县| 南昌县| 文水县| 郴州市| 鄂托克旗| 二手房| 上饶市| 拉萨市| 沙雅县| 龙泉市| 永顺县| 罗定市| 武功县| 元江| 垦利县| 丰顺县| 花莲市| 大兴区| 银川市| 阿拉善盟| 三门县| 龙游县| 新和县| 水富县| 石狮市| 台中市| 崇州市| 舞阳县| 栾城县| 神农架林区| 富锦市|