设计模式(一)单例模式:4-静态代码块模式

思想:

  这一种单例模式的实现,我本来并不准备单独提出来,因为我认为这种模式,和饿汉模式,没有本质的区别。

  但是在 sun.misc.Unsafe 的源码中却实际应用到了这种设计,所以才特地介绍一下。

  简单的说,就是把初始化的工作,放到静态代码块中。

  由于初始化的时间比饿汉模式更加早,我有个同事把它称之为:难民模式。

 1 public final class StaticBlockSingleton {
 2
 3     private static final StaticBlockSingleton instance;
 4
 5     private StaticBlockSingleton() {
 6         if (instance != null) {
 7             throw new IllegalStateException();
 8         }
 9     }
10
11     static {
12         instance = new StaticBlockSingleton();
13     }
14
15     public static final StaticBlockSingleton getInstance() {
16         return instance;
17     }
18
19 }

静态代码块模式

  与饿汉模式相同,不存在多线程及反射打破单例的可能性。

时间: 2024-10-02 02:09:19

设计模式(一)单例模式:4-静态代码块模式的相关文章

单例设计模式之饿汉式(静态代码块)

package com.waibizi.demo02; /** * 单例设计模式之饿汉式(静态代码块) * 这种方式与饿汉式静态常量的方式是类似的,类装载的时候也有直接创建对象 * @author 歪鼻子 * */ @SuppressWarnings("all") public class Singleton_Pattern { public static void main(String[] args) { // TODO Auto-generated method stub } }

java中静态代码块之我的理解

Demo1.funx(); String s=Demo1.string; //静态代码块 会在new一个该类对象时调用 或者调用该类的静态方法,静态成员变量时调用 总之在类加载器将该类加载到内存中时 (无论是通过哪种方式) 都会调用静态代码块 //静态成员变量 静态代码块永远只被初始化一次 无论new多少个对象 //加载类时 初始化顺序   静态成员->静态代码块 ->变量,初始化块->构造函数 //由于静态代码块永远只被加载一次的特性 //常被用来加载配置文件 等初始化操作(单例模式)

构造代码块/局部代码块/静态代码块

构造代码块 直接在类中定义且没有加static关键字的代码块称为{}构造代码; 作用:给对象统一初始化数据 例子:随处可见: Test test = new Test(6); 局部代码块 典型例子:while/ for循环 静态代码块 典型例子:单例设计模式中,喜欢用这个作为控制外界进行创建新实例的反面例子(因为只要调用基类里面的方法,这个静态代码块都要被调用,加了private也毫无意义)! private static Singleton instance = new Singleton()

java中静态代码块的用法—— static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的. 静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就

JavaEE初始化时静态代码块加载问题

1.使用java.exe命令运行某个类的时java.exe Person2.创建一个类的对象时Person p=new Person();3.访问类中的静态成员变量(赋值/获取值)System.out.println(Person.className);4.访问了类中的静态成员方法Person.method();5.创建类的子类对象的时候Student s=new Student();6.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象System.out.printl

Java中普通代码块,构造代码块,静态代码块区别及代码示例

//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行"public class CodeBlock01{ public static void main(String[] args){ { int x=3; System.out.println("1,普通代码块内的变量x="+x); } int x=1; System.out.println("主方法内的变量x="

静态代码块、构造代码块、构造函数的执行

1 public class Str { 2 3 static { 4 System.out.println("static{1}"); 5 } 6 static { 7 System.out.println("static{2}"); 8 } 9 { 10 System.out.println("{}"); 11 } 12 13 Str() { 14 System.out.println("Str()"); 15 } 16

java普通代码块、静态代码块、默认构造方法的执行顺序

1 package test; 2 3 class Parent{ 4 { 5 System.out.println("父类普通代码块"); 6 } 7 static{ 8 System.out.println("父类静态代码块"); 9 } 10 public Parent(){ 11 System.out.println("父类默认构造代码方法"); 12 } 13 } 14 class Child extends Parent{ 15 {

Java误区: 静态代码块,当把类将被载入到自己主动运行?

JAVA静态代码块会在类被载入时自己主动运行? 非常多Java开发人员的思想,被这个思想深深的轮奸了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸. 如:http://blog.csdn.net/leeyu35/article/details/7755304 那么我们程序来证明这句话是错误的: class MyClass1 { static {//静态块 System.out.println("static block "); } } public class Main