Как я создаю статическую локальную переменную в Java?

Я читал, Java не поддерживает static локальные переменные в отличие от C/C++. Теперь, если я хочу кодировать функцию с локальной переменной, значение которой должно сохраниться между вызовами функции, как я делаю это?
Я должен обратиться к использованию переменных экземпляра?

51
задан Vadim Kotov 14 December 2017 в 04:09
поделиться

3 ответа

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

public class Foo {
   static int bar;
   //set bar somewhere

   public int baz() {
      return 3 * bar;
   }
} 
33
ответ дан 7 November 2019 в 10:23
поделиться

Должен ли я прибегать к использованию экземпляра Переменные?

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

4
ответ дан 7 November 2019 в 10:23
поделиться

Если вы хотите повторно использовать значение переменной между вызовами функции и изолировать эту переменную от других методов, то вы должны инкапсулировать ее в объект. Сначала определите класс, в котором будут использоваться только "статические" переменные и нужная функция:

class MyFunctionWithState {
    private int myVar = 0;
    public int call() {
      myVar++;
      return myVar;
    }
 }

Затем из клиентского кода:

class Foo {
    private MyFunctionWithState func = new MyFunctionWithState();
    public int bar() {
      return func.call();
    }
 }

Теперь, если функция полагается на внутреннее состояние Foo, то можно либо передать соответствующие данные через call(), либо передать экземпляр Foo и позволить функции вызвать соответствующие геттеры:

class MyFunctionWithState {
    private int myVar = 0;
    public int call( Foo f ) {
      myVar += f.getBaz();
      return myVar;
    }
 }

class Foo {
    private MyFunctionWithState func = new MyFunctionWithState();
    public int bar() {
      return func.call( this );
    }
    public int getBaz() {  /*...*/  }
 }
6
ответ дан 7 November 2019 в 10:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: