null в Java — это «пустая ссылка»: переменная ссылочного типа не указывает ни на какой объект. Пока ссылка равна null, обращаться к её методам/полям нельзя — это приводит к NullPointerException. В этом практическом уроке (задачи Java онлайн) вы научитесь распознавать места, где возможен NPE, и проверять ссылки на null в простых ситуациях.
- Сравнение с null:
== null/!= null. - NPE возникает при разыменовании: вызов метода, доступ к полю, обращение к длине массива.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Подставьте null и проверку
В коде используется ссылочная переменная типа String, которая может содержать значение или отсутствие значения. В этом случае важно правильно задать отсутствие значения и корректно проверить переменную в условии, чтобы избежать NullPointerException и вывести одно из двух сообщений. Заполните пропуски в объявлении переменной и в проверке так, чтобы программа компилировалась и вела себя ожидаемо при отсутствии значения.
public class Task {
public static void main(String[] args) {
String text = input1S;
if (text input2S input3S) {
System.out.println("Строка не задана");
} else {
System.out.println("Длина: " + text.length());
}
}
}2. Защитное условие перед вызовом метода
В этом фрагменте кода на Java у ссылочной переменной может не быть объекта. Если в таком состоянии попытаться вызвать метод у переменной, программа завершится с NullPointerException. Дополните условие так, чтобы вызов метода выполнялся только при безопасном состоянии переменной, а иначе выводилось сообщение о том, что значения нет. Структуру кода менять нельзя — нужно заполнить только пропуски в проверке.
public class Task {
public static void main(String[] args) {
String login = null;
if (login input1S input2S) {
System.out.println(login.input3S());
} else {
System.out.println("Логин не задан");
}
}
}3. Ошибка: условие приводит к NullPointerException
В этом фрагменте Java-кода допущена логическая ошибка в условии: из-за неверного сравнения переменная может оказаться равной отсутствию объекта, но программа всё равно попадает в ветку if и пытается вызвать метод у ссылки. В результате при выполнении возникает NullPointerException. Исправьте одну локальную ошибку в строке с условием (только оператор сравнения), чтобы метод вызывался только когда ссылка указывает на объект.
public class Task { public static void main(String[] args) { String message = null; if (message == null) { System.out.println(message.toLowerCase()); } }}4. Ошибка: equals вызывается на null-ссылке
В этом фрагменте Java-кода сравниваются строки, но сравнение написано так, что при отсутствии значения в переменной может возникнуть NullPointerException. Нужно исправить одну локальную ошибку в строке с условием: сделать сравнение безопасным для случая, когда переменная равна отсутствию объекта. Новые строки добавлять нельзя — исправляется только проблемный фрагмент сравнения.
public class Task { public static void main(String[] args) { String role = null; if (role.equals("ADMIN")) { System.out.println("Access granted"); } }}5. Соберите null-безопасный сценарий
Из перемешанных строк соберите корректную Java-программу, которая демонстрирует null-безопасный сценарий: создаётся ссылочная переменная, ей присваивается отсутствие значения, затем выполняется проверка на null, и только в безопасной ветке происходит вызов метода у строки. Одна строка лишняя — она нарушает логику null-безопасности и не должна попадать в итоговую последовательность.
public class Task { public static void main(String[] args) { String name = null; if (name != null) { System.out.println(name.toUpperCase()); } else { System.out.println("name is null"); } }} System.out.println(name.length());6. Введите результат сравнения с null
Рассмотрите фрагмент Java-кода, в котором ссылочная переменная сравнивается со значением null, а результат этого сравнения выводится в консоль. Вам нужно мысленно выполнить программу, не изменяя код, и определить, что именно будет напечатано: true или false. Введите в поле ответа только одно логическое значение (true или false) без кавычек и лишних пробелов.
public class Main {
public static void main(String[] args) {
String name = null;
boolean isNull = name == null;
System.out.println(isNull);
}
}7. Где может возникнуть NullPointerException?
Перед вами фрагмент Java-кода, в котором несколько переменных могут содержать значение null. Ваша задача — внимательно проанализировать код и выделить кликом все места, где происходит разыменование ссылочной переменной (обращение к методу или полю через точку), которое при значении null приведёт к NullPointerException. Не выделяйте безопасные обращения, сравнения с null или присваивания.
String name = null;
String title = "Report";
List<String> items = null;
if ({{name != null~|~t1}}) {
System.out.println({{name.toUpperCase()~|~t2}});
} else {
System.out.println("Name is missing");
}
System.out.println({{title.length()~|~t3}});
if ({{items != null~|~t4}}) {
System.out.println({{items.size()~|~t5}});
}
// Опасные места без проверки:
{{name.length()~|~t6}};
{{items.get(0)~|~t7}};
{{title.toLowerCase()~|~t8}};
8. Разметьте: null, ссылка и разыменование
Разметьте выделенные фрагменты кода Java: укажите, где используется литерал «null», где показаны имена ссылочных переменных и где происходит разыменование — обращение к полю или методу по ссылке. Это задание помогает увидеть, в каком месте программы может возникнуть NullPointerException при попытке вызвать метод у отсутствующего объекта.
String {{userName~|~t1}} = {{null~|~t2}};
System.out.println({{userName.length()~|~t3}});
{{userName~|~t4}} = "Alex";
System.out.println({{userName.length()~|~t5}});
9. Сопоставьте ситуацию и результат
В левой колонке находятся фрагменты Java-кода с различными ситуациями, связанными с использованием значения null: присваивание, сравнение и вызов методов. В правой колонке даны краткие описания того, что произойдёт при выполнении каждой строки: булевый результат или возникновение NullPointerException. Сопоставьте каждый фрагмент кода слева с соответствующим описанием результата справа.
String s = null;String s = null; boolean result = (s == null);String s = null; boolean result = s == "Java";String s = null; boolean result = s.equals("Java");String s = "Java"; boolean result = s.equals(null);String s = null; int len = s.length();Integer n = null; boolean result = (n == 0);