Где применяется Java
И Java, и C++ — объектно-ориентированные языки программирования, но на этом их сходства, пожалуй, заканчиваются, а вот отличий между ними достаточно много.
Начнем с основы java. Java — чистый объектно-ориентированный язык программирования; следовательно, в Java все является объектом (однокорневая иерархия, поскольку всё исходит от java.lang.Object).
Рекомендуем курс по теме
Для чего нужен С++
В то время как в C++ не существует подобной корневой иерархии. C++ поддерживает как процедурное, так и объектно-ориентированное программирование; поэтому он называется гибридным. Ниже в таблице приведены основные характеристики этих языков и их отличия.
Рекомендуем курс по теме
Основные отличия языков Java и C++
Java | C++ |
---|---|
Java не поддерживает указатели (pointers), шаблоны (templates), объединения (unions), перегрузку операторов (operator overloading), структур и т.д. Изначально было заявлено, что в языке Java нет никаких указателей, но многим программистам было непонятно, как можно работать без указателей, и тогда стали говорить, что их ограниченное количество. Java поддерживает так называемые «ссылки» (“references”). Ссылки имеют во многом схожую с указателями в С++ функцию, но на указателях в Java невозможно совершать арифметические действия. У ссылок есть типы, и они типобезопасны (type-safe). Их нельзя интерпретировать как адрес raw, а небезопасная конверсия запрещена. | C++ поддерживает структуры, объединения (unions), шаблоны (templates), перегрузку операторов (operator overloading), указатели (pointers) и адресную арифметику указателей (pointer aritdmetic). |
Java поддерживает автоматическое управление освобождением динамической памяти. Она, в отличие от C++, не поддерживает деструкторы. | C++ поддерживает деструкторы. Эта функция автоматически активируется при уничтожении объекта. |
Java не поддерживает условную компиляцию и включение. | Условное включение (#ifdef #ifndef type) – одна из основных функций C++. |
Java обладает встроенной поддержкой потоков (tdreads). В Java есть класс потоков, который наследуется для создания нового потока и переопределения метода run. | C++ не имеет встроенной поддержки потоков. Для этих целей используются нестандартизированные библиотеки третьих сторон. |
Java не поддерживает параметры по умолчанию. В Java нет оператора разрешения контекста (::). Определения метода должны происходить внутри класса, поэтому нет нужды в разрешении конфликта. | C++ поддерживает параметры по умолчанию. C++ имеет оператор разрешения контекста (::), используемый для определения метода вне класса и для доступа к глобальной переменной внутри из области действия идентификатора, где внутренняя переменная также существует с тем же именем. |
В Java нет оператора перехода «goto». Сохраняются ключевые слова «const» and «goto» несмотря на то, что они не используются. | C++ обладает оператором перехода «goto». Однако, использование оператора перехода «goto» не приветствуется. |
Java не предоставляет множественное наследование, по крайней мере, не так, как C++. | C++ поддерживает множественное наследование. Для устранения неоднозначности в случае её возникновения во время множественного наследования используется ключевое слово «virtual». |
Обработка исключений «exceptions» в Java отличается, поскольку деструкторы отсутствуют. К тому же в Java команды «try/catch» должны определяться в том случае, если функция указывает, что может сгенерировать исключения «exception». | В то время, как в C++ может не включать команды «try/catch» несмотря на то, что эта функция генерирует исключения. |
В Java есть метод перегрузки «metdod overloading», но отсутствует перегрузка операторов «operator overloading». Класс «Stringclass» не использует операторы + и += для соединения строк «strings», а строковые выражения «Stringexpressions» используют автоматическое преобразование типов, но это особенная встроенная опция (built-in case). | C++ поддерживает как перегрузку метода, так и перегрузку оператора. |
Java имеет встроенную поддержку комментариев к документации (/** ... */); поэтому исходные файлы Java могут содержать собственную документацию, которая читается отдельным инструментом, обычно Javadoc, и переформатироваться в HTML. Это упрощает ведение документации. | C++ не поддерживает комментарии к документации. |
Java, по большей мере, интерпретируется, поэтому не зависит от платформы. | C++ генерирует объектный код; тот же код может не запускаться на разных платформах. |