9. 创建的成员对象是私有的,如何在该类静态方法中访问私有的实例化对象?

112 阅读2分钟

9. 创建的成员对象是私有的,如何在该类静态方法中访问私有的实例化对象?

在一个类的静态方法中,无法直接访问该类的私有实例化对象。因为静态方法是属于类的,而不是属于某个特定的对象。

如果确实需要在静态方法中访问私有实例化对象,则可以通过以下步骤实现:

  1. 将私有实例化对象设置为静态变量。
  2. 在类加载时,将私有实例化对象赋值给静态变量。
  3. 在静态方法中,通过访问静态变量来访问私有实例化对象。

下面是一个示例代码,展示如何在静态方法中访问私有实例化对象:

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关键字修饰。

image.png