Подтвердить что ты не робот

Является ли Java полностью независимой от платформы?

Является ли Java полностью независимой от платформы?

если нет, то нужно позаботиться о том, чтобы ваш код, написанный на Java, мог работать на Multi Platforms. В основном это должно работать на целевых платформах, таких как Windows (различные версии), Linux (все вкусы), Mac и Solaris.

4b9b3361

Ответ 1

Хотя на практике большинство скомпилированных байтовых кодов независимы от платформы, мой опыт в моей 12-летней разработке на платформе Java научил меня, что все еще есть особенности от платформы к платформе.

Например, при разработке приложения Java 1.4 Swing для ПК и MacOSX поведение диалогов было иным, если родительский кадр равен нулю.

Другим примером может быть работа с файловой системой и файлами в целом. Java API имеет методы, помогающие защитить разработчика от различий в разделителях пути (/ vs \). При записи в файл важно использовать API-интерфейс FileWriter так, как это предусмотрено, чтобы возвращаемые символы и т.д. Генерировались должным образом для платформы, на которой она написана.

Итак, хотя девиз "пишите один раз, бегите куда угодно", мой опыт был для производства, он пишет один раз, тестирует, везде.

В результате, с сильными модульными и интеграционными тестами можно помочь в этом, так как вы можете выполнить эти тесты на разных платформах, которые хотите распространять свое программное обеспечение.

Несмотря на некоторые незначительные проблемы здесь и там, здорово видеть, что ваш код работает в Linux, Unix, Windows и MacOSX (BSD Unix), используя те же JAR.

Ответ 2

Как отметил дьякобсон, ответ - это квалифицированное "да". По большей части разработчикам Java не нужно беспокоиться о зависимостях платформы. Однако вы можете столкнуться с проблемами, когда имеете дело с API, которые обрабатывают традиционные функции ОС и платформы.

При работе с файловыми вводами/выводами, например, легко сделать свою платформу кода зависимой, игнорируя различия между разделителями файлов и путей на разных платформах (т.е. используя '\', а не File.separator).

Ответ 3

По большей части да. Поскольку Java компилируется в байт-код, который выполняется его виртуальной машиной, обычно можно ожидать, что он будет вести себя одинаково независимо от системы, находящейся под виртуальной машиной.

Однако. Даже виртуальные машины не защищены от ошибок. Быстрый поиск Google включает следующее, например:

http://www.ibm.com/developerworks/java/library/j-diag0521.html

Различия в поведении могут варьироваться от JVM до JVM. Надеюсь, вы не получите код, который зависит от любого из этих случаев... но тщательное исследование стоит знать, каковы ограничения вашей инфраструктуры.

Ответ 4

Вы не будете выполнять свой код, но, скорее, предположения, которые вы должны делать о путях файлов, доступных внешних командах (если они вам нужны), необходимых разрешениях файлов и других внешних факторах, которые действительно не подпадают под "Java" проблемный домен. Если вы не планируете широко использовать собственный код (через JNI), Java не будет вашей проблемой, ваша среда будет. Это возвращает нас к старой поговорке: "пишите один раз, проверяйте везде".

Ответ 5

Первоочередной задачей является обсуждение. Другие ОС, например Solaris, имеют больше приоритетов потоков, чем окна. Поэтому, если вы много работаете с многопоточными системами, ОС - это то, что может повлиять на поведение программы.

Ответ 6

Главное, что нужно сделать, это код пользовательского интерфейса, чтобы убедиться, что он правильно отображается на всех платформах, на которых вы будете работать.

Другим источником возможных проблем является развертывание на разных серверах приложений. Между ними могут быть проблемы несовместимости.

Java, кроме этого, не зависит от платформы. Это также одна из его слабостей, поскольку вы кодируете общий знаменатель, и многие функции каждой отдельной ОС недоступны.

Ответ 7

Их очень мало, и они должны быть довольно очевидными. как System.getProperty( "os.name" ) явно зависит от ОС или он не работает. Наиболее распространенным является System.exec(), поскольку он вызывает другое приложение, находящееся в вашей системе, снова вы должны знать, работает ли приложение, которое вы вызываете, одинаково для каждой системы или нет (маловероятно).

Ответ 8

Наряду с вышеупомянутыми проблемами, основная проблема, с которой я столкнулась, была на самом деле построена на разных платформах, и это может быть не то, о чем вы просите, но, возможно, это что-то, о чем следует заботиться.

OS X особенно виновата в этом при использовании Apple Distribution Java (почему кто-то хотел бы поместить свою собственную упаковку Java, которую я не знаю, но это отдельный аргумент, а на OSX я не думаю, что у вас есть выбор, но использовать их java). Библиотеки, на которые вы можете положиться или не можете полагаться, находятся в совершенно разных каталогах, например библиотеки вместо lib, если моя память правильно меня обслуживает. И Java Java я думаю, что пакеты пакетов в разных Jars в некоторых случаях. Смешной!!

Надеюсь, что это поможет.

Ответ 9

Независимость платформы означает, что выполнение вашей программы не зависит от типа операционной системы (она может быть любой: Linux, windows, Mac..etc). Так что компилируйте код только один раз и запустите его на любой системе (в C/С++ нам нужно скомпилировать код для каждой машины, на которой мы ее запускаем). Java является языком компилятора (javac) и интерпретатора (jvm).

Ваш исходный код java сначала скомпилирован в байтовый код с помощью javac компилятора. Этот байтовый код можно легко преобразовать в эквивалентный машинный код с помощью JVM. JVM (виртуальная машина Java) доступна во всех операционных системах, которые мы устанавливаем. Следовательно, байт-код, сгенерированный javac, является универсальным и может быть преобразован в машинный код в любой операционной системе, поэтому Java не зависит от платформы.