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.静态内部 ...
随机推荐
- 【hibernate】重写物理表名和列明
[hibernate]重写物理表名和列明 转载:https://www.cnblogs.com/yangchongxing/p/10357123.html 假设你的数据库命名有这样的需求,表都以 yc ...
- 京东云携手HashiCorp,宣布推出Terraform Provider
2019年4月23日消息,京东云携手云基础设施自动化软件的领导者HashiCorp,宣布推出Terraform Provider for JD Cloud,这意味着用户能够在京东云上轻松使用简单模板语 ...
- NLP(十八)利用ALBERT提升模型预测速度的一次尝试
前沿 在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...
- C#线程学习笔记三:线程池中的I/O线程
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/20/MultiThreads.html,记录一下学习过程以备后续查用. 一.I/O线 ...
- 【Linux 命令】cp 命令详解
Linux 命令之 cp 命令详解 一.cp 命令简介 cp 命令主要用于复制文件或目录.即用来将一个或多个源文件或者目录复制到指定的目的文件或目录. cp 命令可以将单个源文件复制成一个指定文件名的 ...
- C语言笔记 06_作用域&数组
作用域 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定 ...
- Jmeter中使用HTTP信息头管理器发送json格式请求体的接口
Jmeter中,如果请求体的格式为x-www-form-urlencoded,则不需要添加请求头,保持默认即可,但是如果遇到接口的请求体格式为json时,就要用到HTTP信息头管理器,在线程组上右键— ...
- laravel开发大型电商网站之异常设计思路分析
令人讨厌的异常 提起异常,大家都很反感,当信心满满的写完一段代码,刷新页面发现上面写着大大的 Exception 是最心烦的时候了.模块给领导演示的时候,如果报了异常,也是最让人崩溃的时候了. 在一般 ...
- report for PA2
目录 说明 Report for PA 2(writed with vim) Part i - pa2.1 Steps: instr(seperately) Part ii - 2.2 Part ii ...
- 前端开发规范:4-JS
ESLint 使用ESLint的standard规范来编写js代码 更多参考: https://github.com/standard/standard/blob/master/docs/README ...