在没有实例引用的情况下存储和访问类中的对象

时间:2017-01-26 23:01:42

标签: java static

我知道在C#中这可以,但在Java中呢?我已经测试了它并且它可以工作但应该避免,如果是,为什么?

public class A {
     public A() {
          B.set(this);
     }
}

public final class B {
     private static A a;

     public static void set(A a) {
          this.a = a;
     }

     public static A get() {
          return a;
     }

     private B() {
     }
}

1 个答案:

答案 0 :(得分:0)

在Java中

private static A a;

被称为Class字段,它具有相同的值,或者在这种情况下指向此类的每个实例中的同一对象。此外,它可以在没有创建类的实例的情况下访问,在本例中为B.get()。你可以改变这个

public static void set(A a) {
     this.a = a;
}

public static A get() {
     return a;
}

到这个

public static void set(A a) {
     B.a = a;
}

public static A get() {
     return B.a;
}