Статический контекст Java - PullRequest
2 голосов
/ 09 ноября 2010

Я использую пакет, у которого есть вызов метода, который не является статическим.Это не позволит мне вызвать этот метод из статического контекста.Я не могу изменить нестатический метод, как я могу вызвать этот метод?

Ответы [ 6 ]

5 голосов
/ 09 ноября 2010

Чтобы вызвать нестатический метод, необходимо вызвать метод для экземпляра объекта.

Дан следующий класс:

public class MyClass {
    public void nonStaticMethod();
}

Вы бы назвали метод так:

new MyClass().nonStaticMethod();

Или, если вам нужно вызывать этот метод более одного раза, вы можете сохранить его в объекте.

MyClass instance = new MyClass();
instance.nonStaticMethod();
...
instance.nonStaticMethod();
5 голосов
/ 09 ноября 2010

Создать объект из этого класса и вызвать метод объекта?

import com.acme.myclass;

...

MyClass obj = new MyClass();
obj.nonStaticMethod();

Если в используемом пакете есть какая-либо документация, обязательно просмотрите его, чтобы увидеть, как выожидается использовать этот класс и его нестатический метод.Вы также можете прочитать больше о статическом и нестатическом объектно-ориентированном программировании в целом, чтобы лучше понять различия.

1 голос
/ 09 ноября 2010

Вы можете создать экземпляр объекта класса всякий раз, когда вам нужно вызвать нестатический метод, например:

new BadlyWrittenClass().BadlyWrittenMethod();

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

Лучшим способом может быть создание одного объекта, например, в вашем собственном конструкторе классов, и просто использовать его в любое время, когда вам нужно вызвать метод. При условии, что он не требует заново инициализированного объекта каждый раз, это, вероятно, будет более эффективным.

Но вы также можете иметь в виду, что может быть причина , почему метод не является статичным (несмотря на мой не очень тонкий джеб в именах классов и методов выше). Убедитесь, что это не требует какого-либо состояния, которое вы не настраиваете при создании нового экземпляра. Другими словами, не пытайтесь слепо делать это без понимания.

1 голос
/ 09 ноября 2010

Этот метод принадлежит классу.

Итак, вам нужно создать экземпляр этого класса (скорее всего, с оператором new) и затем использовать его:

package a;

class A {
    public void theMethod(){
    }
}

.....
package b;
import a.A;
class Main {
    public static void main( String [] args ) {
        A a = new A();
        a.theMethod();
     }
}
0 голосов
/ 09 ноября 2010

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

0 голосов
/ 09 ноября 2010

Статические методы не требуют создания экземпляров, тогда как методы экземпляров делают это внутри класса экземпляров.

Чтобы получить доступ к методу экземпляра, сначала нужно получить экземпляр его класса с помощью ключевого слова new. Затем вы можете получить доступ к методам экземпляра этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...