static 关键字 应用

175 阅读3分钟

1. static应用知识:代码块

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

代码块分为: 静态代码块,构造代码块。

代码块概述:

代码块是类的5大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中的方法外。

在java类下,使用{} 括起来的代码被称为代码块。

代码块分为: 静态代码块: 需要通过static关键字修饰,随着累的加载而加载,并且自动触发,只执行一次。 使用场景: 在类加载的时候做一些静态数据初始化的操作,以便后续使用。

构造代码块: 每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行。 使用场景:初始化实例资源。


public class TestDemo1 {
    public static String shoolName;

    // 与类一起加载,自动触发一次,优先执行
    // 作用:可以在程序加载时进行静态数据的初始化操作(做准备内容)
    static{
        System.out.println("静态代码块被触发");
        shoolName = "中国人民大学";
    }

    public static void main(String[] args) {
        // 学习静态代码块的特点,基本作用
        System.out.println("main方法执行输出");
        System.out.println(shoolName);
    }
    
}

构造代码块,与对象一起加载。

public class TestDemo2 {
    private String name;

    // 属于对象的,与对象一起加载,自动触发执行。
    {
        System.out.println("==构造代码块被触发执行==");
        name = "ddd";
    }

    public TestDemo2(){
        System.out.println("==构造器被触发执行==");
    }

    public static void main(String[] args) {
        TestDemo2 t = new TestDemo2();
        System.out.println(t.name);
        new TestDemo2();
    }
}

static应用知识:单例设计模式

什么事设计模式:

设计模式是一套被前任反复使用,多人知晓,经过分类编目的代码设计经验的总结,后来者可以直接拿来解决问题。 设计模式是软件设计中常见的解决方法,好的设计模式,可以进一步的提高代码的重用性。

单例模式: 可以保证系统中,应用该模式的这个类永远只有一个实例,一个类永远只能创建一个对象。

单例的场景和作用:

例如任务管理器对象我们只需要一个就可以解决问题了,这样可以节省内存空间。

恶汉单例设计模式: 在类获取对象的时候,对象已经提前为你创建好 了。

设计步骤: 定义一个类,把构造器私有。

定义一个静态变量存储一个对象。

public class SingleInstance {

    // 定义一个公开的静态的成员变量存储一个类的对象,
    public static SingleInstance instance = new SingleInstance();

    // 把构造器隐藏起来
    private SingleInstance(){

    }
}
public class Test {
    public static void main(String[] args) {
        SingleInstance s1 = SingleInstance.instance;
        SingleInstance s2 = SingleInstance.instance;
        SingleInstance s3 = SingleInstance.instance;

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}

打印的内存地址都一样。

饿汉单例的实现步骤?

定义一个类,把构造器私有

定义一个静态变量存储一个对象

懒汉单例模式:

在真正需要该对象的时候,才去创建一个对象,延迟加载对象。

设计步骤: 定义一个类,把构造器私有。 定义一个静态变量存储一个对象。 提供一个返回单例对象的方法。

public class SingleInstance2 {

    // 创建一个静态的成员变量存储本类的独享,注意:此时不能初始化对象
    private static SingleInstance2 instance;

    // 私有构造器
    private SingleInstance2(){

    }
    // 定义一个方法,让其他地方可以来调用获取一个对象
    public static SingleInstance2 getInstance(){
        if (instance == null){
            // 第一次来获取对象
            instance = new SingleInstance2();
        }
        return instance;
    }
}
public class Test {
    public static void main(String[] args) {
        SingleInstance2 s1 = SingleInstance2.getInstance();
        SingleInstance2 s2 = SingleInstance2.getInstance();
        SingleInstance2 s3 = SingleInstance2.getInstance();

        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }
}