Одна из отличительных особенностей языка Java – обратная совместимость версий. Это значит что код, который был написан на Java 5, будет прекрасно работать и на Java 11.

К сожалению, это не работает в обратную сторону. Невозможно поддержать фичи, которые еще не были придуманы.

Скомпилированный .class файл хранит в себе версию байткода x.y – версию формата файла. Минорная часть y версии отражает совместимые технические изменения в рамках той же самой версии Java. Мажорная часть x увеличивается в каждом следующем релизе. Версии формата для разных релизов:

Java SE 14 = 58
Java SE 13 = 57
Java SE 12 = 56
Java SE 11 = 55
Java SE 10 = 54
Java SE 9 = 53
Java SE 8 = 52
Java SE 7 = 51
Java SE 6.0 = 50
Java SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

Ошибка UnsupportedClassVersionError возникает, когда JVM пытается загрузить слишком новую версию класса. Чтобы получить байткод, совместимый со старыми JVM, при компиляции необходимо передать версию в параметре --release (до Java 8 в параметрах -source и -target).