Почему я вижу так много учебников с переменными, объявленными в OnCreate
, и почему это не работает для меня?
Объявление переменных внутриметод, или, снаружи, действительно сводится к тому, какого типа scope
вы хотите связать с переменной.
Внутри метода вы должны быть осторожны, что вы объявляете переменную до того, какВы собираетесь использовать это.
Где подходящее место для их объявления?
Соответствие тому, где объявлять переменную, полностью зависит от того, гдевсе, что вы хотите использовать.Объявление переменной на уровне класса, когда вы собираетесь использовать ее только внутри метода, неразумно.И объявлять переменные в методах, когда многие другие методы в классе хотят получить к нему доступ, и вы в конечном итоге передаете переменные каждому методу - тоже неразумно.Итак, на данный момент вы можете просто рассмотреть:
- Объявление переменных в классе - когда многие методы в классе должны получить к нему доступ.
- Объявление переменной в методах - когда только метод имеетиспользуйте для переменной.
Я хотел бы добавить, что 1 и 2 являются не универсальными правилами, которые могут бытьприменяется вслепую - но чтобы начать, вы можете следовать им, пока не выясните более глубокие нюансы, связанные с областью видимости переменных, спецификацией доступа и временем жизни.
Я не говорю о спецификаторах доступа здесь, так какОни заслуживают очень подробного понимания, которое вы можете получить здесь .И я также не говорил о разнице переменных экземпляра и класса здесь, потому что вам лучше обратиться к официальному документу, например этот .
Я понимаю основы инкапсуляции и наследования, поэтому onCreate
так же, как и любой другой метод, и любые объявленные там переменные изолированы от других методов?
Это верно.
Что касается моих кнопок, я должен объявить их внутри моего класса, но вне onCreate
?
Компоненты пользовательского интерфейса в Android обычно требуются несколькими методами длядоступ.TextView
, Button
и т. Д. - как правило, имеют состояния, которые необходимо изменить в разное время, из разных методов - так что вам лучше объявить их на уровне класса.
Еще одна важная причина, почемуВы должны предпочесть объявление переменных пользовательского интерфейса на уровне класса - это то, что вы уменьшаете накладные расходы на создание инфраструктуры Android для каждого вызова метода.Пока ваш экземпляр Activity
активен, платформа поддерживает компоненты / переменные пользовательского интерфейса.