Де застосовується Java
І Java, і C++ — об'єктно-орієнтовані мови програмування, але на цьому їх схожість, мабуть, закінчуються, а ось відмінностей між ними досить багато. Почнемо з того, що Java - чиста об'єктно-орієнтована мова програмування; отже, у Java все є об'єктом (однокоренева ієрархія, оскільки все виходить від java.lang.Object). У той час як в C++ не існує подібної кореневої ієрархії. C++ підтримує як процедурне, так і об'єктно-орієнтоване програмування; тому він називається гібридним. Нижче у таблиці наведені основні характеристики цих мов і їх відмінності.
Рекомендуємо курс по темі
Для чого потрібен С ++
У той час як в 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 ++ генерує об'єктний код; той же код може не запускатися на різних платформах. |