Обязательно ли методам экземпляра обращаться к переменной экземпляра в java? - PullRequest
1 голос
/ 20 июня 2020
public class Main {

    void sum(int a, int b) {
        int c = a + b;
        System.out.println(c);
    }

    public static void main(String args[]) {
        Main ob = new Main();
        ob.sum(10, 125);
    }
}

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

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Да, 'sum' метод экземпляра, потому что любой нестатический метод c является методом экземпляра. Более того, не обязательно, чтобы метод экземпляра имел доступ к переменной экземпляра. Правильный оператор: «если метод является методом экземпляра, он может получить доступ к переменной экземпляра.

0 голосов
/ 20 июня 2020

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

Main ob = new Main();

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

I прочитали, что если метод является методом экземпляра, он должен обращаться к переменной экземпляра

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

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

Но предположим, что вы расширили свой объект, включив в него методы для subtract, multiply, divide, и c. Предположим, что по мере расширения объекта один или несколько дополнительных методов использовали переменные экземпляра. Было бы неприятно иметь объект с несколькими семантически похожими методами, некоторые из которых static, а некоторые нет.

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

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

...