в Java какие слова нельзя использовать внутри статического метода? - PullRequest
0 голосов
/ 11 июля 2011

Я знаю, что мы не можем использовать «this» внутри статического метода, потому что он используется для указания на объект, а статические методы вызываются классами, а не объектами.

Есть ли что-то еще, что вы не можете использовать внутри статического метода?

Ответы [ 5 ]

3 голосов
/ 11 июля 2011

вы не можете использовать члены экземпляра без экземпляра ... но это в основном то, что вы уже упоминали ...

1 голос
/ 11 июля 2011

Статический метод может только доступ к статическим данным.
не может получить доступ / позвонить

  • Экземплярные (нестатические) переменные класса.
  • Другие нестатические методы изнутри.
  • В любом случае нельзя ссылаться на ключевые слова "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");
     }
}
1 голос
/ 11 июля 2011

вы не можете ссылаться на нестатические переменные экземпляра класса внутри статического метода.

0 голосов
/ 11 июля 2011

Вы также не можете ссылаться на любые универсальные типы, потому что у вас нет контекста конкретного (типизированного) экземпляра.

0 голосов
/ 11 июля 2011

Как уже говорили другие, вы можете получить доступ только к статическим переменным и методам. Еще одна вещь, на которую, я думаю, стоит обратить внимание, это то, что это относится и к таким вещам, как внутренние классы (это может быть не сразу очевидно, по крайней мере, это застало меня врасплох, когда я впервые попытался это сделать):

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...