JavaSE之static和单例模式

2019-03-11  本文已影响0人  伍陆柒_

static

public class StaticDemo1 {
    // 全局变量
    int num1;
    // 类变量
    static int num2;
    public void test1() {
        System.out.println(1);
    }
    public static void test2() {
        System.out.println(1);
    }
    
    public static void main(String[] args) {
        num2 = 1000;
        StaticDemo1.test2();
    }
    
    // static : 静态
    /*
     * 能修饰方法(静态方法),修饰的全局变量称为静态属性(变量)或类变量
     * 不能修饰类,构造器,局部变量
     * 
     * 特点:
     * 静态属性和静态方法,可以直接通过类名调用
     * 静态方法只能直接访问静态成员,不能直接访问非静态成员
     * 静态属性归这个类的所有对象共享
     */
}

静态块

public class StaticDemo2 {
    static int num;
    // 构造器
    public StaticDemo2() {
        System.out.println("构造器1被调用");
    }
    public StaticDemo2(int num) {
        System.out.println("构造器2被调用");
    }
    // 普通代码块 : 相当于构造器的第一句话
    {
        System.out.println("普通代码块被调用");
    }
    // 静态块 : 为静态属性初始化
    // 执行时机:当类型信息加载到方法区就执行了
    static {
        System.out.println("静态块被调用");
    }
    public static void main(String[] args) {
//      StaticDemo2 sd = new StaticDemo2(1);
    }
}

单例模式

public class Singleton {
    /*
     * 单例模式 :保证一个类只能有一个实例(一个类只能创建一个对象)
     *  -- 饿汉模式
     *  -- 懒汉模式(懒加载)
     * 
     * 问题1:怎么解决“多例”(不能让其他类随意的使用构造器)
     * 解决方式 :构造器私有化
     * private Singleton() {}
     * 
     * 问题2:怎么解决提供一个实例
     * 解决方式 :在单例类中创建一个实例
     * Singleton singleton = new Singleton();
     * 
     * 问题3:不能随意修改
     * 解决方式 :将创建的实例也私有
     * private static Singleton singleton = new Singleton();
     * 
     * 问题4:如何获取这个实例
     * 解决方式:提供一个public的方法将这个实例返出去
     * public static Singleton getInstance() {
            return singleton;
       }
     * 
     */
    // 饿汉模式
//  private static Singleton singleton = new Singleton();
//  private Singleton() {}
//  public static Singleton getInstance() {
//      return singleton;
//  }
    // 懒汉模式(懒加载)
    private static Singleton singleton;
    private Singleton() {}
    public static Singleton getInstance() {
        if(singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
    public void test() {
        System.out.println(123);
    }
}
上一篇下一篇

猜你喜欢

热点阅读