引用整个应用程序中在一个类中创建的静态对象

Chr*_*zmo 7 java reference object

我有一个java应用程序在基类中创建两个静态对象,这些对象需要在程序的各个类中引用.

public class Baseclass{
    public static ClassA A = new ClassA();
    public static ClassB B = new Classb();
    ...
    ...
    ...
}   
Run Code Online (Sandbox Code Playgroud)

这些对象在其他类中被引用为本地私有变量.

public class ClassA{
    private ClassB b = Baseclass.B;
Run Code Online (Sandbox Code Playgroud)

但是,两个对象都需要彼此运行,如果在创建另一个对象之前创建其中一个对象的新实例,则"upper"类中的局部变量将设置为null.Java中是否存在将对象的实际对象(如指针)作为变量引用而不是制作对象副本的概念?

Gra*_*ray 8

我认为你要找的答案是"单身模式".这是您只创建一个类的一个实例以便在其他地方使用的地方.这是一个很好的阅读链接.这是维基百科页面上的一些java示例.

所以你的代码看起来像这样:

public class A {
    private final static A instance = new A();

    /* private constructor forces you to use the getInstance() method below */
    private A() {}

    public static A getInstance() {
      return instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,无论您想要获得A的实例,您都可以执行以下操作:

public class B {
    private final A classA = ClassA.getInstance();
    ...
}
Run Code Online (Sandbox Code Playgroud)

没有理由A不能在自己的方法中拥有B和调用B方法的实例.你不能用这个交叉依赖关系来调用构造函数中的任何其他方法.

顺便提一下,顺便说一句,这些模式应该谨慎使用.实现此目的的更好方法是通过依赖注入而不是全局引用.交叉注射是可能的,但同样应该谨慎使用.更好的解决方案是重构类以具有线性依赖性.

Java中是否存在将对象的实际对象(如指针)作为变量引用而不是制作对象副本的概念?

Java是按值传递的,但任何Object的值都是对象的引用(类似于C中的指针,尽管它们不是内存地址).因此,如果您有一个实例A并将其分配给另一个字段,那么该字段将是相同的值,并将引用相同的实例A.

// instantiate a new instance of A
A a1 = new A();
// assign the reference to A to another variable
a2 = a1;
// they are equivalent and both reference the same object
if (a1 == a2) ...
Run Code Online (Sandbox Code Playgroud)