Обычно, когда новичкам рассказывают про преимущества Java, упоминают платформонезависимость. Я правильно понял, что разработав Java-приложение, мы можем его собрать в несколько установочных файлов под каждую ОС, и теперь оно будет работать на каждой из этих ОС?
Платформонезависимость Java опирается на существование виртуальной машины Java (JVM) на каждой поддерживаемой платформе.
На разных платформах JVM разные. Но программы на Java могут запуститься на любой из них (если не учитывать различные версии Java), поскольку собираются не в родной формат платформы, а в промежуточный код JVM, обычно называемый байткодом.
Можно считать, что Java и её платформа это два разных языка. Для первого компиляторы есть у разработчиков приложений, а для второго компиляторы есть и у пользователей. И с языком платформы мало кто работает напрямую, даже среди разработчиков (если только с какими-нибудь экзотическими целями вроде глубокого профилирования или разработки под JVM нового языка — коих, кстати, полно).
Ещё один нюанс: нативные (родные для платформы) расширения, которые расширяют возможности Java да пределы стандартных библиотек, платформозависимы. То есть, чтобы сохранить платформонезависимость Java в необходимой мере, нужно используемые расширения подготовить для каждой нужной платформы отдельно.
Что касается версий Java, о чём я упомянул выше — платформа развивается и обрастает новыми возможностями. Поэтому версия Java, которой программа была собрана, должна поддерживаться теми версиями JVM, в которые вы целитесь.
Разработчики JVM очень уважают обратную совместимость, и в большинстве случаев собранную на старой версии Java программу получится запустить на новой JVM. Но поскольку поддержка старых версий без существенного сдерживания новых довольно сложна, не стоит рассчитывать, что все старые версии языка будут поддерживаться вечно.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости