Проверка версии Java в рантайме: надежный метод

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для определения версии Java, воспользуйтесь System.getProperty("java.version"):

Java
Скопировать код
System.out.println("Версия Java: " + System.getProperty("java.version"));

Для условных сверок, основанных на версии Java, извлеките старшую версию следующим образом:

Java
Скопировать код
String versionString = System.getProperty("java.version");
int majorVersion = Integer.parseInt(versionString.split("\\.")[0]);
if (majorVersion == 1) { // Ещё не прошли те золотые времена Java!
    majorVersion = Integer.parseInt(versionString.split("\\.")[1]);
}
// "majorVersion" готов к использованию в условных выражениях

Начиная с Java 9 и выше рекомендуется использовать метод Runtime.version():

Java
Скопировать код
Runtime.Version runtimeVersion = Runtime.version();
System.out.println("Старшая версия Java: " + runtimeVersion.major()); // выводит старшую версию текущей Java
Кинга Идем в IT: пошаговый план для смены профессии

Определение версии в разных средах выполнения JVM

Для обеспечения обратной совместимости с различными JVM определяйте версию реализации с помощью Runtime.class.getPackage().getImplementationVersion().

Разбор компонентов версии Java

Для детального анализа строки версии разбейте её на составляющие или преобразуйте в число с плавающей точкой:

Java
Скопировать код
String[] versionElements = System.getProperty("java.version").split("\\D+");
int major = Integer.parseInt(versionElements[0]);
int minor = Integer.parseInt(versionElements[1]);
int patch = Integer.parseInt(versionElements[2]);

// Или преобразуйте в число с плавающей точкой:
double versionNumber = Double.parseDouble(major + "." + minor);

Работа с ошибками, связанными с версией Java

Для избежания ошибок JDK 1.5, прямо сравните версию Java:

Java
Скопировать код
if (System.getProperty("java.version").startsWith("1.5")) {
    // Мы вспоминаем ошики Java 1.5 или ищем обходные пути
}

Визуализация

Вот простой способ представления идентификатора версии Java:

Markdown
Скопировать код
Runtime (🏃‍♂️ Java): "Покажите, пожалуйста, ваш ID?"

System.getProperty("java.version"): "🆔 1.8.0_131" // Не путайте, это не "Java 20". Проверьте актуальность!
System.getProperty("java.runtime.version"): "🆔 1.8.0_131-b11" // "Полная версия" с номером обновления и сборки

Подобные свойства можно воспринимать как удостоверения личности с разной степенью детализации.

Использование альтернативных свойств: 'java.specification.version' и 'java.runtime.version'

Для понимания системы именования Java используйте java.specification.version для простых проверок и java.runtime.version для более точной информации. Технические статьи Sun дают глубокое понимание об этих "перламутрах".

Практическое использование: объединение всех этапов

Произведение сравнений, зависящих от версии

Если логика вашего приложения зависит от определенных версий Java, используйте сравнения:

Java
Скопировать код
// Используем java.specification.version для серьезной беседы о старших версиях
String specVersion = System.getProperty("java.specification.version");
if (specVersion.equals("1.8")) {
    // Вспоминаем о Java 8, когда Плутон еще был планетой?
}

Обеспечение совместимости между разными реализациями JVM

Чтобы ваше приложение работало верно с разными реализациями JVM, воспользуйтесь классом Runtime:

Java
Скопировать код
String implementationVersion = Runtime.class.getPackage().getImplementationVersion();
System.out.println("Версия реализации JVM: " + implementationVersion); // выводит версию вашей локальной JVM

Учёт особенностей, связанных с версией

Помните, что разные версии Java обладают своими спецификациями. Адаптеры и проверки помогут предотвратить ошибки и непредвиденное поведение в исключительных ситуациях, связанных с определенными версиями Java.

Полезные материалы

  1. Oracle Docs – Системные свойства — Подробное руководство по использованию системных свойств Java во время выполнения.
  2. Stack Overflow – Как определить версию Java при помощи системных свойств — Обсуждение на Stack Overflow на тему, почему этот код лучше, чем java –version.
  3. Apache Commons Lang – SystemUtils — Библиотека для эффективного использования системных свойств.
  4. Oracle Docs – Класс Runtime — Детальное изучение класса Runtime в документации Java SE 7.
  5. DZone Refcard – Основы Java — Путеводитель по базовым элементам Java для разработчиков.
Свежие материалы