Java连载54-两种单例模式、接口详解
一、单例模式分为两种:
(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-两种单例模式、接口详解的更多相关文章
- 7、java实现的两种单例模式
/* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public stat ...
- iOS同一项目多个Target的快速实现方法 - 两种使用场景详解
我们项目中,默认建好是只有一个target的,但是,一些场景中,多target能帮助我们更好的使用项目. 场景1: 同一项目,一般会分不同环境:开发环境.测试环境.正式(生产)环境. 这就涉及到一个请 ...
- Android四大组件之服务的两种启动方式详解
Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...
- Spark的两种核心Shuffle详解
在 MapReduce 框架中, Shuffle 阶段是连接 Map 与 Reduce 之间的桥梁, Map 阶段通过 Shuffle 过程将数据输出到 Reduce 阶段中.由于 Shuffle 涉 ...
- servlet两种配置方法详解
1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...
- python模块的导入的两种方式区别详解
Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...
- apache两种工作模式详解
prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...
- UEFI与 Legacy BIOS两种启动模式详解
(1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...
- Java集合【2】--iterator接口详解
目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...
- Java连载58-静态内部类、成员内部类详解
一.内部类的分类: (1)静态内部类(2)成员内部类(3)局部内部类(4)匿名内部类 二.静态内部类 1.静态内部类可以等同的看做是静态变量 内部类的重要作用:可以访问外部类中的私有数据 2.静态内部 ...
随机推荐
- 前端小白要搞懂什么是HTML,看这一篇就够了
本文是<HTML5与CSS3基础语法自学教程>的第一篇,首发于[前端课湛]微信公众号. 导读:本小节主要讲解 HTML 的基本信息,其中包含 HTML 概念.HTML 发展历程和 HTML ...
- 7个点说清楚spring cloud微服务架构
前言 spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,spring cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A ...
- python学习-os引入
# 引入import os # 路径处理 -- 外部资源-os # 获取当前的工作路径workspace = os.getcwd() # os模块下的getcwd函数print(workspace) ...
- python学习-while
"""while 条件: 条件满足时,干的事情.如果条件一直满足,一直去重复的执行代码.直接条件不满足为止,停止循环."""# salary ...
- Websphere 重置admin 控制台密码
By way of wsadmin command: <WAS_INSTALL_DIR>/bin/> wsadmin -conntype NONE wsadmin> secur ...
- matplotlib可视化最全指南
1. 折线图:plt.plot 设置数据:plt.plot(x,y),单列数据传入默认y轴,此时x轴数据默认从0逐渐对应递增 设置颜色:plt.plot(x,y,color/c=" &quo ...
- 《.Net 最佳实践》 - 学习笔记
<.Net 最佳实践> ========== ========== ==========[作者] (美) Stephen Ritchie[译者] (中) 黄灯桥 黄浩宇 李永[出版] 机械 ...
- Nezuko: 1 Vulnhub Walkthrough
下载地址: https://www.vulnhub.com/entry/nezuko-1,352/ 虚拟机启动,设置IP地址DHCP获取 主机发现扫描: 主机层面扫描: ╰─ nmap -p1-655 ...
- Java多线程面试问答
今天,我们将讨论Java 多线程面试问答. 线程是Java面试问题中的热门话题之一.在这里,我从面试的角度列出了大多数重要的Java多线程面试问题,但是您应该对Java线程有足够的知识来处理后续问题. ...
- Java面试必看之Integer.parseInt()与Integer.valueOf()
Integer.parseInt()和Integer.valueOf()都是将成为String转换为Int,但是为什么Java会提供两个这样的方法呢,他们如果是同样的操作,岂不是多此一举? 我们来深挖 ...