单例模式之静态内部类

单例模式

        就我目前而言,使用静态内部类的地方仅在单例模式,代码如下:

public class OuterClass {
​
    private OuterClass() {
    }
​
    public static OuterClass getInstance(){
        return InnerClass.INSTANCE;
    }
​
    private static class InnerClass{
        private static final OuterClass INSTANCE = new OuterClass();
    }
}
根据类加载机制,外部类的加载并不会导致静态内部类的初始化

Java类加载过程_夜光下丶的博客-CSDN博客 

静态内部类定义

Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes.https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

从字面上来看,一个被称为静态嵌套类,一个被称为内部类

什么是嵌套?嵌套就是我和你没有关系,自己可以完全独立存在,但我就是想借用你的壳用一下,来隐藏我自己

什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我(所以内部类对象是以外部类对象存在为前提的)

如果一个类被static修饰,那么只有一种情况,该类为静态内部类。若使用static修饰外部类,则将不会通过编译。

静态内部类和静态方法一样,只能访问外部类的静态方法或成员变量,而内部类可以访问外部类的任意方法和成员变量(包括 private修饰)。

静态内部类可以声明普通的成员方法和变量,而内部类不能声明静态成员方法和变量

静态内部类可以单独初始化,即在创建静态内部类时不需要将静态内部类的实例绑定到外部类的实例上,

一般而言,Java中的静态概念是用来创建类级别的变量,例如静态变量和静态方法是类的一部分,而不是实例的一部分。

Java 可以嵌套静态类,但是静态类不能处于嵌套的顶层

静态内部类就是个独立的类。

之所以要弄这么个东西,只是起到一个注释的效果,而且这个注释可静态检查。

比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。

这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。

非静态的才是真正的内部类,对其外部类有个引用。

 

你可能感兴趣的:(java,单例模式)