1. static
可以用来修饰
- 成员变量——类变量
- 成员方法——类方法
- 内部类——静态内部类,不能修饰普通类
因为由static修饰,均存在方法区中。
1.1 类变量
修饰变量时,变量属于类,不属于实例对象,直接使用 类名.变量名 调用。
具体应用为:某数据此类只需要一份,且希望能被共享
例如:SpringBoot开发中的日志类,一般用public static final 修饰。
1.2 类方法
修饰方法时,方法属于类,直接使用 类名.方法名 调用,不需要构建实例对象。
具体应用为工具类。大多用public static ...
需注意类方法中只能访问外部的静态数据,且不能用this。
1.3 静态内部类
修饰内部类时为静态内部类,创建静态内部类对象不能直接 new Inner() 创建,需要 new Outer.Inner() 这样创建。
需要注意静态内部类中只能访问外部类的静态数据。外部类可以访问静态内部类所有数据。
1.4 static应用:单例模式(复习)
单例模式主要解决以下问题:
-
资源利用率:当类需要频繁地创建和销毁实例时,尤其是在资源消耗较大的情况下(例如数据库连接、文件系统操作等),单例模式可以保证在整个应用程序中只存在一个实例,从而避免了因多次实例化带来的资源浪费。
-
全局状态共享与管理:在某些场景下,可能需要所有对象都共享同一份数据或状态,或者对某个关键服务的访问必须是全局唯一的。通过单例模式,可以提供一个全局访问点,确保所有的对象都使用同一份资源或访问同一个服务。
-
控制实例数目:单例模式强制限制了类只能有一个实例,这样设计者就可以严格控制那些需要唯一实例的对象的创建过程,防止无节制的实例化导致的问题。
-
一致性保证:对于一些要求在整个应用范围内状态保持一致性的组件,如缓存、配置信息容器等,采用单例模式能够确保无论从何处获取该组件都是同一个实例,进而维护了数据的一致性。
-
线程安全问题:在多线程环境中,如果不采取措施可能会有多个线程同时创建单例对象,破坏单例原则。因此,实现单例模式时通常会考虑线程安全问题,确保无论何时何地,即使是并发环境下,也能保证只有一个实例被创建和使用。
总结一下就是
- 想要控制某个实例的数量,来解决资源浪费,无节制实例化,一致性等问题。
- 想保证所有对象共用一份数据,或者要求某个服务是全局唯一的。
1.4.1 三种饿汉式
a.静态变量方式()
public class Singleton1 {//私有构造方法private Singleton() {}//私有静态成员变量private static final Singleton1 singleton1 = new Singleton();//对外提供访问方法public static Singleton getInstance() {return singleton1}}