一、单例模式分为两种:

(1)饿汉式单例:在类加载阶段就创建了一个对象。

(2)懒汉式单例:用对对象的时候才会创建对象。(连载53中例子就是懒汉式)

饿汉式举例:


package com.bjpowernode.java_learning;

​

public class D54_1_HungtySingtonMode {

  public static void main(String[] args) {

    Customer54 c1 = Customer54.getCustomer54();

    Customer54 c2 = Customer54.getCustomer54();

    System.out.println(c1==c2);

  }

}

//饿汉式单例模式

class Customer54{

  private static Customer54 c = new Customer54();

  private Customer54() {}

  public static Customer54 getCustomer54(){

    return c;

  }

}

二、接口也是一种引用类型,可以等同看作类

1.如何定义接口,语法:


[修饰符] interface 接口名()

2.接口中只能出现:常量、抽象方法

3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的

4.接口中没有构造方法,无法被实例化

5.接口和接口之间可以多继承

6.一个类可以实现多个接口。(这里的”实现“可以等同看作”继承“)

7.一个非抽象的类实现接口,需要将接口中所有的方法“实现/重写/覆盖”

package com.bjpowernode.java_learning;

​

public interface D54_2_InterfaceExercise {

  public static final String SUCCESS = "sucess";

  public static final double PI = 3.1415926;

  //public static final在接口中是可以省略的,因为由于语法规则知道,只能是常量

  byte MAX_VALUE = 127;

  public abstract void m54();//抽象方法

  void test54();//这也是抽象方法,这里的public abstract也是可以省略的。原因同上

}

​

interface B54 {

  void m2();

}

interface C54{

  void m3();

}

interface D54{

  void m4();

}

interface E53 extends B54,C54,D54{

  void m5();

}

//implements是实现的意思

//由于类是单继承的,所以这里使用新的关键字implements来实现

class MyClass implements B54,C54{

  public void m2() {}//由于m2原来是抽象方法,这里我们新的类必须覆盖重写m2方法

  public void m3() {}

}

​

class F54 implements E54{

  public void m2() {}

  public void m3() {}

  public void m4() {}

  public void m5() {}

}

我们按照上面的七个语法进行了举例。

三、接口的作用(先看个例子吧,总结下次再说)

package com.bjpowernode.java_learning;

​

public interface D54_3_CustomerService {

  void logout();

}

package com.bjpowernode.java_learning;

​

public class D54_4_ImplementCustomer{

  public static void main(String[] args) {

    //以下程序面向接口去调用

    D54_3_CustomerService d1 = new D54_4_ImplementCustomerService();//多态

    d1.logout();//底层类,类型是接口,可以的是使用的接口中的方法,实际调用由于底层是类,所以实际用的类的方法

  }

}

class D54_4_ImplementCustomerService implements D54_3_CustomerService{

  //对接口中的抽象方法进行实现

  public void logout() {

    System.out.println("成功退出系统!");

  }

}

四、源码:

D54_1_HungtySingtonMode.java

D54_2_InterfaceExercise.java

D54_3_CustomerService.java

D54_4_ImplementCustomer.java

地址:

https://github.com/ruigege66/Java/blob/master/D54_1_HungtySingtonMode.java

https://github.com/ruigege66/Java/blob/master/D54_2_InterfaceExercise.java

https://github.com/ruigege66/Java/blob/master/D54_3_CustomerService.java

https://github.com/ruigege66/Java/blob/master/D54_4_ImplementCustomer.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载54-两种单例模式、接口详解的更多相关文章

  1. 7、java实现的两种单例模式

    /* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public stat ...

  2. iOS同一项目多个Target的快速实现方法 - 两种使用场景详解

    我们项目中,默认建好是只有一个target的,但是,一些场景中,多target能帮助我们更好的使用项目. 场景1: 同一项目,一般会分不同环境:开发环境.测试环境.正式(生产)环境. 这就涉及到一个请 ...

  3. Android四大组件之服务的两种启动方式详解

    Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...

  4. Spark的两种核心Shuffle详解

    在 MapReduce 框架中, Shuffle 阶段是连接 Map 与 Reduce 之间的桥梁, Map 阶段通过 Shuffle 过程将数据输出到 Reduce 阶段中.由于 Shuffle 涉 ...

  5. servlet两种配置方法详解

     1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...

  6. python模块的导入的两种方式区别详解

    Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...

  7. apache两种工作模式详解

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  8. UEFI与 Legacy BIOS两种启动模式详解

    (1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...

  9. Java集合【2】--iterator接口详解

    目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...

  10. Java连载58-静态内部类、成员内部类详解

    一.内部类的分类: (1)静态内部类(2)成员内部类(3)局部内部类(4)匿名内部类 二.静态内部类 1.静态内部类可以等同的看做是静态变量 内部类的重要作用:可以访问外部类中的私有数据 2.静态内部 ...

随机推荐

  1. 了解web漏洞-sql注入

    1:为什么要学web漏洞? 作为一个运维人员,日常工作就是保障服务器和网站的业务正常运行,平时也需要对服务器的安全工作加固,说到防护攻击问题,那么久必须去了解攻击者是怎么对服务器发动的一个流程,这样才 ...

  2. 【Java Web开发学习】Servlet、Filter、Listener

    [Java Web开发学习]Servlet 转发:https://www.cnblogs.com/yangchongxing/p/9274739.html 1.Servlet package cn.y ...

  3. gitbook 入门教程之网站域名备案 icp 插件

    欢迎访问 gitbook-plugin-icp 官网

  4. 更改CSDN博客皮肤的一种简易方法

    CSDN改版后,皮肤设置变得不能够更改了,不过下面这种方法依然可以做到: 首先来到博客设置的主页面:. 接下来按ctrl + shift + i进入 如下页面,然后点击图中红色标记圈起来的选择元素按钮 ...

  5. 学习SQL注入---1

    开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...

  6. adb 获取平台号

    获取 Android 的 PLATFORM_VERSION :adb shell getprop ro.build.version.release获取 Android 的 APP_PACKAGE 和 ...

  7. Linux重要的服务讲述(1)

    NFS 概述 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS ...

  8. Pycharm导入Django项目

    Pycharm导入Django项目 添加项目:file-->open,找到项目所在的位置打开项目 添加django后台项目路径 file-->settings-->Languages ...

  9. Git submodule update 命令执行

    git submodule update操作可能导致执行.gitmodules文件中定义的任意shell命令. 受影响的产品 Git版本2.20.0至2.24.0 修复版本 Git v2.24.1,v ...

  10. React每隔0.2s颜色变淡 之生命周期 ,componentDidMount表示组件已经挂载

    05案例 每隔0.2s颜色变淡 componentDidMount表示组件已经挂载,可以进行DOM操作 import React, { Component } from "react&quo ...