Быстрый старт: классы, объекты, строки и циклы в 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. Удачи в практических задачах!