Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг
ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70% Забронировать скидку
10 Июл 2023
2 мин
108

Выполнение Java кода в комментариях с использованием определенных символов Unicode

Одной из интересных особенностей языка программирования Java является возможность «исполнения» кода, записанного в комментариях. Это может показаться

Одной из интересных особенностей языка программирования Java является возможность «исполнения» кода, записанного в комментариях. Это может показаться странным, ведь в общем смысле комментарии не предназначены для выполнения. Они служат для объяснения кода и не влияют на его работу. Однако в Java есть исключение, связанное с использованием определенных символов Unicode.

Рассмотрим пример кода:

public class Main {
    public static void main(String[] args) {
        // Код внизу не является ошибкой
        // \u000d System.out.println("Привет, мир!");
    }
}

При выполнении этого кода в консоли отобразится сообщение «Привет, мир!», хотя казалось бы, строка с этим сообщением закомментирована. В чем же дело?

Дело в том, что Java обрабатывает символы Unicode до того, как начинает анализировать синтаксис кода. В Unicode символ \u000d обозначает символ новой строки или возврата каретки (carriage return). Поэтому вместо этого символа компилятор подставляет новую строку, и получается, что комментарий заканчивается, а следующей строкой идет уже исполняемый код.

public class Main {
    public static void main(String[] args) {
        // Код внизу не является ошибкой
        //
        System.out.println("Привет, мир!");
    }
}

Может возникнуть вопрос: почему это допускается? Не могут ли такие «комментарии» использоваться для скрытия злонамеренного кода? В действительности, это весьма редкий случай, который сложно встретить в реальной практике. К тому же, хорошие практики программирования включают чтение и понимание кода перед его исполнением, что должно предотвратить выполнение потенциально вредоносного кода. Наконец, спецификация Java позволяет использование Unicode символов, и \u000d является одним из них.

Добавить комментарий

Подарок
Забрать подарок