在Java中我们可以在静态方法中使用哪些单词?

时间:2011-07-11 01:50:41

标签: java static

我知道我们不能在静态方法中使用“this”,因为它用于指向对象,静态方法由类而不是对象调用。

在静态方法中是否还有其他东西无法使用?

5 个答案:

答案 0 :(得分:3)

你可能不会在没有实例的情况下使用实例成员......但这基本上就是你已经提到的......

答案 1 :(得分:1)

你不能在静态方法中引用类的非静态实例变量。

答案 2 :(得分:1)

静态方法 只能 访问静态数据 它无法访问/调用

  • 类的实例(非静态)变量。
  • 其中的其他非静态方法。
  • 无论如何都无法引用"this""super"个关键字

示例:无法访问非静态数据,即实例变量“name”,无法从静态方法内部调用非静态方法play()。

public class Employee  {
          private String name;
          private String address;
          public static int counter;
      public Employee(String name, String address)   {
                this.name = name;
                this.address = address;
                this.number = ++counter;
               }

      public static int getCounter()  {
            System.out.println(“Inside getCounter”);
            name = “Rich”; //does not compile!

            // Let's say, e is a object of type Employee.
            e.play();      //Cannot call non-static methods. Hence, won't compile !
            return counter;
        }

     public void play() {
            System.out.println("Play called from Static method ? No, that's not possible");
     }
}

答案 3 :(得分:0)

正如其他人所说,你只能访问静态变量和方法。我想你应该注意的另一件事是,这也适用于像内部类这样的东西(这可能不会立即显而易见,至少它在我第一次尝试这样做时抓住了我):

public class OuterClass
{
    private class InnerClass {}

    private static void staticMethod()
    {
        // Compile-time error!
        InnerClass inner = new InnerClass();
    }
}

发出编译时错误:

  

无法访问类型为OuterClass的封闭实例。必须使用OuterClass类型的封闭实例限定分配(例如x.new A(),其中x是OuterClass的实例)。

但这是有效的:

public class OuterClass
{
    private static class InnerClass {}

    private static void staticMethod()
    {
        // Compiles fine
        InnerClass inner = new InnerClass();
    }
}

答案 4 :(得分:0)

您也不能引用任何泛型类型,因为您没有具体(类型化)实例的上下文。