美文网首页
JavaSE之static和单例模式

JavaSE之static和单例模式

作者: 伍陆柒_ | 来源:发表于2019-03-11 17:21 被阅读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);
        }
    }
    

    相关文章

      网友评论

          本文标题:JavaSE之static和单例模式

          本文链接:https://www.haomeiwen.com/subject/uiwbpqtx.html