Быстрый старт: классы, объекты, строки и циклы в Android (с примерами)
Короткий ответ: в Android Java класс описывает сущность (Activity, View или ваша модель), объект — её экземпляр, String — неизменяемая строка, а циклы (for, enhanced for, while) используются для перебора данных и обновления UI. Ниже — компактные примеры и советы, которые можно вставить в Activity или адаптер сразу.
Классы и объекты: простой шаблон модели
Класс хранит поля и методы. В Android такие классы часто используются для моделей данных, передаваемых между Activity или в адаптеры RecyclerView.
Пример модели UserProfile:
public class UserProfile {
private String name;
private int age;
public UserProfile(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public String format() {
return name + " (" + age + ")";
}
}
Создание и использование в Activity (в onCreate или onViewCreated):
UserProfile u = new UserProfile("Алексей", 28);
TextView tv = findViewById(R.id.profilesText);
tv.setText(u.format());
Совет: инициализируйте объекты в жизненном цикле (onCreate/onStart/onViewCreated), чтобы избежать NullPointerException.
Используйте конструкторы и геттеры/сеттеры, чтобы контролировать инварианты (например, возраст >= 0).
Работа со строками: String vs StringBuilder
String в Java неизменяем — каждый результат конкатенации создаёт новый объект. Для логов или сборки больших текстов внутри циклов применяйте StringBuilder.
Примеры:
String greeting = "Привет, Android!";
String full = greeting + " " + "Разработчик";
StringBuilder sb = new StringBuilder();
sb.append("Пользователи:\n");
for (UserProfile p : profiles) {
sb.append(p.getName()).append(" - ").append(p.getAge()).append("\n");
}
textView.setText(sb.toString());
Не собирайте строки через "+" в больших циклах — это может замедлить приложение и увеличить сборку мусора.
Циклы: когда какой использовать и практический пример
- for (i) — когда нужен индекс и известна длина массива.
- enhanced for — для аккуратного перебора коллекций (ArrayList, List).
- while / do-while — когда условие заранее неизвестно (повторные попытки, ожидание событий).
Пример: заполнение списка и вывод в TextView в Activity:
public class MainActivity extends AppCompatActivity {
private List<UserProfile> profiles = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
profiles.add(new UserProfile("Анна", 24));
profiles.add(new UserProfile("Дмитрий", 30));
StringBuilder sb = new StringBuilder();
for (UserProfile p : profiles) {
sb.append(p.format()).append("\n");
}
TextView tv = findViewById(R.id.profilesText);
tv.setText(sb.toString());
}
}
Для масштабируемого списка замените TextView на RecyclerView и используйте адаптер с обновлением через notifyItemRangeInserted/notifyDataSetChanged.
Частые ошибки
- Инициализация view/объектов вне onCreate/onViewCreated → NullPointerException.
- Конкатенация String в больших циклах → утечки производительности.
- Модификация коллекции при итерации без использования итератора → ConcurrentModificationException.
- Хранение больших объектов в статических полях → утечки памяти.
FAQ
- Как выбрать между String и StringBuilder?
- StringBuilder — для частой модификации или сборки больших строк (в циклах). String — для коротких неизменяемых значений.
- Где лучше инициализировать модели в Activity?
- В onCreate или onViewCreated (для Fragment) — до обращения к View и логике UI.
- Можно ли использовать Kotlin-подходы в Java-коде?
- Можно, но синтаксис и возможности разные; для новых проектов рекомендован Kotlin, однако Java остаётся полностью поддерживаемой.
Освойте эти шаблоны — и вы сможете быстро перейти к работе с адаптерами, базой данных и сетевыми вызовами в Android. Удачи в практических задачах!