在java中声明静态对象

时间:2014-04-17 09:01:43

标签: java

我有一个由静态方法组成的类。他们需要使用另一个类的对象。

class A{
  B obj = new B();

public static void method()
{
  //using obj here
 }
}

在这里声明static B obj = new obj()正确的做法?

5 个答案:

答案 0 :(得分:2)

  

声明静态B obj = new obj(),这是正确的方法吗?

是的,如果你在静态方法中使用obj。而且,这是在方法中访问obj的唯一方法。

您无法访问A类对象的A类实例字段

答案 1 :(得分:2)

只需更改这样的声明就可以了:

class A {

    private static B obj = new B();

    public static void method() {
        System.out.println(obj);
    }
}

class B {}

答案 2 :(得分:1)

是。这是对的。

class A{
  static B obj = new B();

public static void method()
{
  // now you can use obj here.
 }
}

答案 3 :(得分:1)

如果您未将obj声明为static成员,则无法在static方法中使用它们

答案 4 :(得分:0)

  

声明静态B obj = new obj(),这是正确的方法吗?

这确实解决了你的问题(见下文)。 是否正确的方法取决于您想要给予该字段的含义

  • 如果该字段具有全局含义,并且在没有任何类A的实例的情况下存在它是有意义的,那么确定它static是正确的方法。
  • 如果该字段仅对类A的对象(A实例)有意义,那么它不应该是{{1} }(因此,是static字段)。在这种情况下:
    • 要么静态方法需要访问此字段,这是没有意义的。
    • 或者您的方法是静态的,因为它与实例相关

为什么静态解决问题:

instance关键字排序&#34; 我在此声明的内容并不依赖于此类的实例,而只取决于类本身&#34;。< / p>

这就是static方法无法访问实例字段(非静态字段)的原因。该方法可以通过static调用,但该字段不存在而没有创建实例A.method(),因此该方法显然不能使用它。

如果该字段被声明为new A(),则可以访问该字段,因为它也独立于实例。