доступ к нестатическому методу из статического контекста - PullRequest
4 голосов
/ 25 августа 2011

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

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

private int someFunction(int x, int y){
    return (x+y+5)
} 

, но я бы хотел вызвать эту функцию из main (public static void main(String args[]) ). Как бы я это сделал?

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

Ответы [ 5 ]

8 голосов
/ 25 августа 2011

Эта функция не требует доступа к каким-либо переменным-членам, поэтому вы можете объявить метод как статический:

private static int someFunction(int x, int y) {
        ^^^^^^
    return (x+y+5)
} 

Это позволит вам позвонить с main, используя someFunction(arg1, arg2) или YourClass.someFunction(arg1, arg2).


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

new YourClass().someFunction(0, 1);

или (если вам нужно повторно использовать экземпляр позже)

YourClass x = new YourClass();
x.sumFunction(0, 1);
1 голос
/ 25 августа 2011

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

В вашем случае

new MyClass (). SomeFunction (5,6);

0 голосов
/ 25 августа 2011

Поскольку ваш метод someFunction не является статическим, вы не сможете вызывать этот метод из статического контекста, например: main ().1. Таким образом, вы можете сделать someFunction

static private someFunction () 

2.или создать объект из main () и вызвать someFunction, например:

A a = new A ();
a.someFunction (4, 5);

0 голосов
/ 25 августа 2011

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

Изучите руководства Java по Sun для объяснения различия между объектами и классами, если вы немного запутались - это очень важная концепция!

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

0 голосов
/ 25 августа 2011

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

Итак, если, например, у вас есть класс MyApp, который содержит someFunction() и main(String[] args), выполните в вашем основном методе следующее:

new MyApp().someFunction(1, 2);

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