亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.單例模式

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

步驟:

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

2.餓漢式

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

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

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

2.final的使用

1.基本介紹

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

2.使用場景

①當不希望父類被繼承。

②當不希望父類的方法被子類重寫。

③當不希望類的某個屬性被修改

④當不希望某個局部變量被修改

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

3.使用注意事項和細節(jié)討論

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

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

①定義時直接賦值。

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

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

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

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

①定義時直接賦值。

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

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

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

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

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

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

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

3.抽象類

1.基本介紹

用abstract關鍵字修飾的類叫抽象類,abstract還可以用來修飾一個方法,即抽象類。

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

2.使用注意事項和細節(jié)討論

1.抽象類不能被實例化。

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

3.當一個類中有一個抽象方法,這個類也要定義為抽象類。

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

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

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

7.抽象方法不能用private,static,final來修飾,因為這些關鍵字與重寫相違背

4.接口

1.基本介紹

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

}

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

2.注意事項和細節(jié)討論

1.接口不能被實例化

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

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

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

5.當一個類實現(xiàn)了一個接口,這個類就可以調(diào)用接口中的所有屬性和默認方法,但不能調(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被關閉");
    }
}

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

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

2.繼承的價值主要在于:解決代碼的復用性和可維護性。

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

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

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

4.接口與繼承同時出現(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("手機正在工作。。。");
    }
    public void call(){
        System.out.println("手機正在打電話。。。");
    }
}
public class Camera implements UsbInterface{
    @Override
    public void work() {
        System.out.println("相機正在工作。。。");
    }
}
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() {
    }
} 

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

相關文章

  • 關于JAVA8的 Stream學習

    關于JAVA8的 Stream學習

    這篇文章主要介紹了JAVA8 Stream學習方法的相關資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • 詳解Java中NullPointerException異常的原因詳解以及解決方法

    詳解Java中NullPointerException異常的原因詳解以及解決方法

    這篇文章主要介紹了詳解Java中NullPointerException異常的原因詳解以及解決方法。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • java調(diào)用dll方法總結(jié)

    java調(diào)用dll方法總結(jié)

    本篇文章小編給大家整理了java調(diào)用dll的方法的總結(jié),有需要的朋友參考學下一下吧。
    2017-12-12
  • Java重寫(Override)與重載(Overload)區(qū)別原理解析

    Java重寫(Override)與重載(Overload)區(qū)別原理解析

    這篇文章主要介紹了Java重寫(Override)與重載(Overload)區(qū)別原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java語言----三種循環(huán)語句的區(qū)別介紹

    Java語言----三種循環(huán)語句的區(qū)別介紹

    下面小編就為大家?guī)硪黄狫ava語言----三種循環(huán)語句的區(qū)別介紹。小編舉得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • SpringBoot+Nacos+Kafka微服務流編排的簡單實現(xiàn)

    SpringBoot+Nacos+Kafka微服務流編排的簡單實現(xiàn)

    本文主要介紹了SpringBoot+Nacos+Kafka微服務流編排的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 面試中遇到的java逃逸分析問題

    面試中遇到的java逃逸分析問題

    這篇文章主要介紹了面試中遇到的java逃逸分析問題,逃逸分析(Escape Analysis)簡單來講就是,Java Hotspot 虛擬機可以分析新創(chuàng)建對象的使用范圍,并決定是否在 Java 堆上分配內(nèi)存的一項技術(shù)。,需要的朋友可以參考下
    2019-06-06
  • Java中的Cookie和Session詳細解析

    Java中的Cookie和Session詳細解析

    這篇文章主要介紹了Java中的Cookie和Session詳細解析,客戶端會話技術(shù),服務端給客戶端的數(shù)據(jù),存儲于客戶端(瀏覽器),由于是保存在客戶端上的,所以存在安全問題,需要的朋友可以參考下
    2024-01-01
  • Java讀取文件方法匯總

    Java讀取文件方法匯總

    這篇文章主要為大家詳細介紹了Java讀取文件方法,按字節(jié)讀取文件內(nèi)容、按字符讀取文件內(nèi)容、隨機讀取文件內(nèi)容等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 如何優(yōu)雅的替換掉Java代碼中的if else

    如何優(yōu)雅的替換掉Java代碼中的if else

    這篇文章主要介紹了如何優(yōu)雅的替換掉Java代碼中的if else,幫助大家優(yōu)化自己的Java代碼,提高可讀性與簡潔性,感興趣的朋友可以了解下
    2020-09-09

最新評論