写一个单例模式示例
*写一个单例模式示例
*要点
*1.某个类只能有一个实例
- 构造器私有化
*2.它必须自行创建这个实例
- 含有一个该类的静态变量来保存这个唯一的实例
*3.它必须自行向整个系统提供这个实例
- 对外提供获取该实例的方式:1.直接暴露2.用静态变量的get方法获取
*几种常见形式
*饿汉式:
在类初始化时直接创建对象,不管是否需要这个对象都会创建,
不存在线程安全问题
- 直接实例化饿汉式(简洁直观)public static final SingletonDemo INSTANSE=new SingletonDemo();private SingletonDemo() {}
- 枚举式(最简洁)枚举类型:标识该实例的对象是有限几个,我们可以定为一个,就成了单例public enum Singleton2{INSTANCE}
- 静态代码块饿汉式(适合复杂实例化)public static final SingletonDemo INSTANCE;static {INSTANCE=new SingletonDemo();}private SingletonDemo() { }
*懒汉式:
延迟创建对象
- 线程不安全(适用与单线程)
- 线程安全(适用于多线程)
- 静态内部类形式(适用于多线程)
懒汉式示例
/** 懒汉式:* 1)构造器私有化* 2)用一个静态变量保存这个唯一的实例* 3)提供一个静态方法,获取这个实例对象*/class SingletonDemo {/** 线程不安全(适用与单线程)* private static SingletonDemo INSTANCE;private SingletonDemo(){ }public static SingletonDemo getINSTANCE() {if(INSTANCE==null) {INSTANCE=new SingletonDemo();}return INSTANCE;}*//*** // 线程安全(适用于多线程)private static SingletonDemo INSTANCE;private SingletonDemo(){ }public static SingletonDemo getINSTANCE() {if(INSTANCE==null) {synchronized (SingletonDemo.class) {if (INSTANCE == null) {INSTANCE = new SingletonDemo();}}}return INSTANCE;} *//** 静态内部类形式(适用于多线程)* 在内部类被加载和初始化时,才创INSTANCE对象* 静态内部类不会自动随着外部类的加载和初始化而初始化,它是要单独加载和初始化的* 因为是在内部类加载和初始化时创建的,因此线程是安全的*/private SingletonDemo() {}private static class Inner{private static final SingletonDemo INSTANCE=new SingletonDemo();}public static SingletonDemo getInstance() {return Inner.INSTANCE;} }public class SingletonTest{public static void main(String[] args) {SingletonDemo s1=SingletonDemo.getInstance();SingletonDemo s2=SingletonDemo.getInstance();System.out.println(s1==s2);System.out.println(s1);System.out.println(s2);} }static的作用:
1.修饰成员变量给变量加上static关键字后,变量变为全局变量*JVM在加载时会将此变量加载到方法区而不是堆里 2.修饰成员方法可以使用 类名.方法名 操作方法 不需要在new出对象 3.静态代码块当new出一个对象后,static修饰的成员变量首先被初始化随后是普通成员,最后是构造方法,*在程序运行的过程中,static只会在第一次new时被初始化 4.静态导包 5.代码块静态块最先执行,其次时普通代码块,再是构造方法final的用法:
1.用在类上表示该类不可以被继承 2.用在方法上表示该方法不可以被重写(override) 3.用在变量上表示 该变量一旦被赋值 值不能被改变static修饰的属性强调它们只有一个,final修饰的属性表明
是一个常数(创建后不能被修改)。static final修饰的属性
表示一旦给值,就不可修改,并且可以通过类名访问。
总结
- 上一篇: 标准化窄带物联网商用网络 在福州试点落地
- 下一篇: 一个好用的录屏工具