Где правильно инициализировать обьекты?

1,00
р.
Меня учили, что все переменные и обьекты нужно инициализировать в onCreate() , ну в смысле глобальные (как правило).
Но уже несколько раз встречаю в коде опытных разработчиков когда например листы инициализируются прям там где обьявляются переменные
private OnVideoSelectedListener mCallback
private AdapterList mAdapterList = null
private ArrayList> mTempVideoData = new ArrayList<>() private ArrayList> mVideoData = new ArrayList<>()
private String mNextPageToken = "" private String mVideoIds = "" private String mDuration = "00:00"
private boolean mIsStillLoading = true
Не сколько это правильно и ничему ли это не мешает? Например быстродействию программы или еще что то?

Ответ
Где правильно инициализировать обьекты?
Согласно документации, к инициализации объектов есть только одно требование: Поля и переменные должны быть инициализированны до того как они будут использоваться. Так что ответ будет - в любом месте.
Меня учили, что все переменные и обьекты нужно инициализировать в onCreate()...
Я так понимаю что вопрос больше про андроид. OnCreate() - это метод который предназначен для инициализации Activity и он будет вызван как только вы запустите Activity с интентом. Это нормально и общепринято, инициализировать поля в onCreate методе. Я думаю что главная идея сделать инициализацию Activity в onCreate это сократить время старта приложения. Когда ваше приложение запускается, андроид создает экземпляры всех классов (не уверен на счет всех) и если что-то долгое выполняется в конструкторе, то это замедлит старт приложения. Это также относится к выделению памяти для полей класса. Хотя конечно, это мизерное время. Но стоит помннить, что если вы попытаетесь использовать Activity как
Activity activity = new Activity() activity.someMethod()....
тогда, onCreate() метод вызыван не будет.
В общем, касательно вопроса где инициализировать, наиболее распростороненны два способа: - там где переменная объявлена - в конструкторе
оба правильные, я предпочитаю констркторы. В любом случае старайтесь следовать одному стилю.
Для полноты ответа отмечу, что вы также можете инициализировать поля в инициализационном блоке
class A { private String myField { myField = "..." } }