通过Java中的main方法访问非静态成员

时间:2011-10-25 18:04:44

标签: java

作为面向对象范例的规则,静态方法只能访问静态变量和静态方法。如果是这样的话,就会出现一个明显的问题,即Java中的main()方法如何能够访问非静态成员(变量或方法),即使它特别是public static void ... !!!

7 个答案:

答案 0 :(得分:23)

主方法也无法访问非静态成员。

public class Snippet
{
   private String instanceVariable;
   private static String staticVariable;

   public String instanceMethod()
   {
      return "instance";
   }

   public static String staticMethod()
   {
      return "static";
   }

   public static void main(String[] args)
   {
      System.out.println(staticVariable); // ok
      System.out.println(Snippet.staticMethod()); // ok

      System.out.println(new Snippet().instanceMethod()); // ok
      System.out.println(new Snippet().instanceVariable); // ok

      System.out.println(Snippet.instanceMethod()); // wrong
      System.out.println(instanceVariable);         // wrong 
   }
}

答案 1 :(得分:6)

通过创建该类的对象。

public class Test {
    int x;

    public static void main(String[] args) {
        Test t = new Test();
        t.x = 5;
    }
}

答案 2 :(得分:3)

main()方法不能有权访问非静态变量和方法,当你尝试这样做时,你将得到“非静态方法无法从静态上下文中引用”。

这是因为默认情况下,当您调用/访问方法或变量时,它实际上是访问this.method()或this.variable。但是在main()方法或任何其他静态方法()中,还没有创建“this”对象。

从这个意义上说,静态方法不是包含它的类的对象实例的一部分。这是实用程序类背后的想法。

要在静态上下文中调用任何非静态方法或变量,您需要首先使用构造函数或工厂构建对象,就像在类之外的任何位置一样构建对象。

答案 3 :(得分:2)

YourClass inst = new YourClass();
inst.nonStaticMethod();
inst.nonStaticField = 5;

答案 4 :(得分:1)

通过对象的引用。

public class A {
    private String field;


    public static void main(String... args) {
        //System.out.println(field); <-- can not do this
        A a = new A();
        System.out.println(a.field); //<-- access instance var field that belongs to the instance a 
    }
}

答案 5 :(得分:1)

您必须实例化您想要访问的对象。

例如

public class MyClass{

  private String myData = "data";

  public String getData(){
     return myData;
  }

  public static void main(String[] args){
     MyClass obj = new MyClass();
     System.out.println(obj.getData());
  }
}

答案 6 :(得分:0)

您必须创建该类的实例才能引用实例变量&amp;方法