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

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

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

1.單例模式

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

步驟:

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

2.餓漢式

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

3.懶漢式

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

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

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

2.final的使用

1.基本介紹

final可以修飾類(lèi),屬性,方法和局部變量。

2.使用場(chǎng)景

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

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

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

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

final class A{};//當(dāng)不希望父類(lèi)被繼承。
class B{
    public final void display(){};//當(dāng)不希望父類(lèi)的方法被子類(lèi)重寫(xiě)。
    public final int A_B = 10;//當(dāng)不希望類(lèi)的某個(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類(lèi)不能繼承,但可以實(shí)例化對(duì)象。

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

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

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

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

3.抽象類(lèi)

1.基本介紹

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

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

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

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

2.抽象類(lèi)可以沒(méi)有abstract方法。

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

4.abstract只能修飾類(lèi)和方法,不能修飾屬性和其他。

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

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

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

4.接口

1.基本介紹

interface 接口名{
    //屬性
    //方法(可以為抽象方法,靜態(tài)方法,默認(rèn)方法)
    //在JDk7.0之前接口的所有方法都為抽象方法
}
class 類(lèi)名 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è)普通類(lèi)實(shí)現(xiàn)接口。就必須將該接口的所有方法都實(shí)現(xiàn),可以使用alt+enter來(lái)解決

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

5.當(dāng)一個(gè)類(lèi)實(shí)現(xiàn)了一個(gè)接口,這個(gè)類(lèi)就可以調(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.繼承是將父類(lèi)的所有繼承過(guò)來(lái),子類(lèi)天生就擁有父類(lèi)的所有屬性,實(shí)現(xiàn)接口就像是后天學(xué)習(xí)其他的沒(méi)有的技能。

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)如何訪問(wè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 );
    }
    //接口的屬性直接通過(guò)接口名訪問(wèn),父類(lèi)通過(guò)super訪問(wèn)
    public static void main(String[] args) {
        new C().display();
    }
}

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

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

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

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及抽象類(lèi)和接口詳解的文章就介紹到這了,更多相關(guān)Java單例模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了Java Native關(guān)鍵字原理及作用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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_(kāi)發(fā)中經(jīng)常會(huì)遇到,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • OpenCV在Android上的應(yīng)用示例

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

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

    實(shí)例解析使用Java實(shí)現(xiàn)基本的音頻播放器的編寫(xiě)要點(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代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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ò)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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的父輩,在繼承過(guò)程中兩個(gè)關(guān)鍵字經(jīng)常被用到,需要的朋友可以參考下
    2016-03-03
  • Sa-Token中的SaSession對(duì)象使用學(xué)習(xí)示例詳解

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

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

最新評(píng)論

昔阳县| 湟中县| 精河县| 衡水市| 承德市| 安康市| 绵竹市| 阿拉善左旗| 嘉黎县| 鱼台县| 瑞金市| 夏河县| 福清市| 平昌县| 延吉市| 镇康县| 渭源县| 休宁县| 罗江县| 潢川县| 沙湾县| 松桃| 太谷县| 霞浦县| 桑植县| 勃利县| 东安县| 上林县| 郴州市| 陆川县| 庄浪县| 丁青县| 浑源县| 永登县| 临洮县| 阳东县| 汪清县| 志丹县| 宜君县| 桓台县| 大化|