9. 创建的成员对象是私有的,如何在该类静态方法中访问私有的实例化对象?
在一个类的静态方法中,无法直接访问该类的私有实例化对象。因为静态方法是属于类的,而不是属于某个特定的对象。
如果确实需要在静态方法中访问私有实例化对象,则可以通过以下步骤实现:
- 将私有实例化对象设置为静态变量。
- 在类加载时,将私有实例化对象赋值给静态变量。
- 在静态方法中,通过访问静态变量来访问私有实例化对象。
下面是一个示例代码,展示如何在静态方法中访问私有实例化对象:
public class MyClass {
private MyObject myObject;
public static void myStaticMethod() {
MyObject obj = MyClass.myObject;
obj.doSomething();
}
private static MyObject myObject = new MyObject();
private class MyObject {
public void doSomething() {
// ...
}
}
}
在这个示例中,私有实例化对象 myObject 被设置为静态变量,并在类加载时被初始化。在静态方法 myStaticMethod() 中,通过访问静态变量 myObject 来访问私有实例化对象,并调用其方法 doSomething()。
笔者
我们在写单例设计模式的时候,不可避免的提到饿汉式:静态成员成员变量方式
package com.pattern.pattern01.singleton01;
/**
* @Author:kaiyang.cui
* @Package:com.pattern.pattern01.singleton01
* @Project:Pattern23
* @name:Singleton
* @Date:2023/4/12 下午11:55
* @Filename:Singleton
* @Description:饿汉式:静态成员成员变量方式
* @Version:1.0
*/
public class Singleton {
/**
* 1. 私有构造方法
*/
private Singleton(){
}
//2. 在本类中创建本类对象
private static Singleton singleton = new Singleton();
/**
* 3. 提供一个公共的访问方式,让外界获取该对象
* @return 私有构造方法的对象
*/
public static Singleton getInstance(){
return singleton;
}
}
我们都知道饿汉式是这么写的,可是老师并没有说清楚,为什么2. 在本类中创建本类对象 中创建私有的构造方法时候,要添加static修饰 ???!!!
那是因为我们的单例模式只允许一个对象被创建,提供一个公有的静态方法让外部的代码访问,既然是静态的方法,无法直接调用私有的构造方法,静态的方法不能直接访问非静态对象/方法。例如饿汉中,如果非静态的方法要访问私有的构造方法时,必须添加static关键字修饰。