Для тих, хто хоче бути впевненим, що нічого не завадить стати програмістом, ми підготували два додаткових курсу які ви БЕЗКОШТОВНО отримаєте при замовленні.

Отже, представляємо Вам перший додатковий курс, який присвячений всім болючим граблях, які можуть зустрітися Вам на шляху:

У подарунок: 5 Смертельних помилок
початківця програміста

Навчальний відеокурс


  • Як НЕ вийде вивчити програмування?
  • Що може звести на НІ всі Ваші зусилля?
  • Яке навчання дає максимальний результат?
  • Яка ціна теоретичних знань?
  • Чи допоможуть Вам ВНЗ в освоєнні програмування?
  • Як треба вчитися, щоб мати хороший результат?
  • Що повинно стати Вашою "дороговказною зіркою" в програмуванні?
  • Як відсіяти то що потрібно від того що не потрібно?

Всі ці відповіді чекають Вас в:

навчальному відеокурсу
5 Смертельних помилок починаючого програміста

До кінця акції залишилося:

  • хвилини
  • секунди

Тепер на черзі другий додатковий курс з 7 модулів, за допомогою якого ви зможете швидко використовувати Англійська мова в програмуванні.

Контактні дані авторів курсу

Можливо, в процесі навчання Ви захочете щось уточнити або порадитися з авторами курсу. Саме на цей випадок ми надамо Вам приватні контактні дані авторів курсу - до курсу буде прикладена ось така картка з контактами для зв'язку. З ними Вам буде не страшна будь-яка проблема, що виникла в програмуванні!

Ви можете бути впевнені, що яка б проблема перед Вами не стояла - Ви отримаєте від нас слушну пораду і рішення Вашої ситуації.

(Будь ласка, не турбуйте нас вночі, вночі ми зазвичай спимо, хоч і не завжди ;-))


У подарунок: Книжковий самовчитель
"Програмування з нуля"

Як ви можливо знаєте повноцінні програми для Windows на JAVA писати дуже складно, простіше використовувати сторонній мову для роботи з вікнами.

Якщо ви замислювалися над вивченням та інших мов програмування, ця книга дозволить вам отримати необхідні знання про розробку на інших мовах програмування, які зможуть доповнити ваші програми на JAVA.

Для цілковитого освоєння всього програмування:

Цей самовчитель Ви також отримаєте при замовленні «JAVA з нуля»
БЕЗКОШТОВНО!

До кінця акції залишилося:

  • хвилини
  • секунди

ВІДЕОінструкція з управління собою
У подарунок: Чарівний стусан
для вивчення програмування

  • Для тих, хто хоче навчитися програмувати, але постійно щось заважає
  • Для тих, хто не може змусити себе вивчити програмування
  • Потужний мотиваційно-емоційний поштовх для вивчення програмування
  • Досягніть того що ви хочете не змушуючи себе!

Припустимо вивчити програмування вам обов'язково ТРЕБА! Тільки як змусити себе це зробити? Як завестися? Як захотіти приділити цьому час? Для цього і створений даний відеокурс, він дасть вам сильний мотиваційний поштовх.

Ціна: 4370 рублів (87,4 $)

Цей курс Ви також отримаєте при замовленні «JAVA з нуля» БЕЗКОШТОВНО!

До кінця акції залишилося:

  • хвилини
  • секунди

Але і це ще не все!

Для того щоб зробити вас максимально щасливим і укомплектованість на будь-який випадок, ми подаруємо ще два подарунки:

Це означає, що результатом кожного завдання буде готова програма, яка може принести Вам і Вашим друзям користь!

До кожного навчального модулю додається спеціальне домашнє завдання, Підготовлене професійними викладачами нашого центру, виконавши яке Ви запам'ятаєте і закріпіть тільки що отримані знання. До деяких модулів крім звичайних завдань додаються завдання підвищеної складності. Всі завдання записані в спеціальний додаток до курсу.

Виконання Д / З грає першорядну роль в отриманні сертифікату про навчання в Центрі програмування Артема Кашеварова.

Дві години консультацій

Ціна: 2000 рублів (62,2 $)

Спеціально для VIP клієнтів введена можливість індивідуальних консультацій особисто з засновником нашого центру Артемом Кашеварова. У зв'язку з великою зайнятістю він зазвичай не може консультувати всіх і з усіх питань.

Але завжди є можливість "Купити" його час. (Зазвичай це робиться через цю форму -)

Звичайна вартість консультацій / індивідуальних занять 1000р. в годину.

З курсом "JAVA з нуля" буде прикладена ось така картка з двома безкоштовними годинами консультацій у Артема Кашеварова.

Консультації проводяться за різними темами - це можуть бути індивідуальні заняття з якогось мови, консультації з питань поширення і монетизації Ваших додатків і інтернет проектів, а також будь-яка інша допомога, яку він зможе Вам надати.

Дві години індивідуальних консультацій з Артемом Кашеварова Ви отримаєте БЕЗКОШТОВНО при замовленні курсу «JAVA з нуля»

Як оформити замовлення на участь в курсі?

На жаль, прямо зараз замовити курс "JAVA з нуля" не вийде. Зараз він проходить передпродажну підготовку - штампуються диски, друкується поліграфія. З дня на день курс буде доступний для замовлення і участі, АЛЕ тільки для учасників нашого Центру Програмування. Пізніше (приблизно через 2-3 місяці) він стане доступний для всіх бажаючих. Ми хочемо, щоб саме учасники нашого центру отримували все найкорисніше в першу чергу.

Якщо Ви хочете теж приєднатися і стати учасником нашого центру - просто заповніть форму нижче. Тоді ми повідомимо Вам по e-mail, коли курс стане доступний для участі!

Кількість учасників обмежена: 150 86 людей (технічне обмеження)

Мова Java. Вступ.

Довгий час важко було уявити собі комп'ютерний журнал без статті, присвяченій мови Java. Про нього писали навіть такі популярні газети і журнали, як The New York Times, The Washington Post і Business Week.

Неможливо пригадати, щоб національне громадське радіо (National Public Radio) коли-небудь присвячувало мови програмування десятихвилинну передачу. Добре це чи погано, залежить від точки зору. А інвестиції обсягом 100 мільйонів доларів, вкладені у виробництво програмного забезпечення, Створюваного за допомогою конкретного мови програмування ?! Телекомпанії CNN, CNBC і інші засоби масової інформації тільки і говорили, та й зараз кажуть, про те, як мова Java і то зможе, і це зробить.

Однак ця книга призначена для серйозних програмістів, а оскільки мова Java - це серйозний мову програмування, нам є про що розповісти. Отже, ми не станемо занурюватися в аналіз рекламних обіцянок і намагатися з'ясувати, що в них правда, а що вигадка. Замість цього ми досить докладно опишемо мову Java саме як мова програмування (включаючи, зрозуміло, особливості, що дозволяють використовувати його для роботи в Інтернет, які, власне, і викликали стільки рекламного галасу). Після цього ми спробуємо відокремити реальність від фантазій, пояснивши, що мова Java дійсно може, а що - ні.

На перших порах між рекламними обіцянками і реальними можливостями мови Java лежала прірва. У міру його дозрівання технологія ставала все більш стабільною і надійною, а очікування знизилися до розумного рівня. Зараз мова Java все ширше використовується для створення "проміжного програмного забезпечення" (middleware), що підтримує зв'язок між клієнтами і ресурсами серверів (наприклад, базами даних).

Незважаючи на те, що ці важливі програми не вражають уяву, саме в цій області мову Java виявився найбільш корисним завдяки своїй машинної незалежності, багатопоточності і можливостям мережевого програмування. Крім того, мова Java захопив лідерство в області вбудованих систем (embedded systems), ставши фактичним стандартом портативних пристроїв, віртуальних кіосків, бортових автомобільних комп'ютерів і т.п. Однак перші спроби переписати на мові Java широко поширені програми для персональних комп'ютерів не увінчалися успіхом - отримані додатки виявилися малопотужними і повільними. З появою нової версії деякі з цих проблем вдалося вирішити, і все ж потрібно визнати, що користувачам, в общем-то, абсолютно байдуже, якою мовою написані куплені ними програми. Ми вважаємо, що основні переваги мови Java проявляться при створенні нових видів пристроїв і додатків, а не при переписуванні уже існуючих програм.

Мова Java як засіб програмування

як мову програмування Java перевиконав свої рекламні обіцянки. Безсумнівно, це один з кращих мов, Доступних серйозним програмістам. Потенційно Java має всі передумови, щоб стати великим мовою програмування, проте, ймовірно, зараз вже занадто пізно. Коли з'являється нова мова програмування, негайно виникає неприємна проблема його сумісності з програмним забезпеченням, створеним раніше. Більш того, навіть якщо зміни в ці програми можна внести без втручання в їх текст, творцям мови, який так палко вітався публікою, як, наприклад, мова Java, складно прямо сказати: "Так, можливо ми помилилися при розробці версії X, але версія Y буде краще ". У підсумку, чекаючи появи подальших поліпшень, ми повинні констатувати, що структура мови Java в найближчому майбутньому істотно не зміниться.

Виникає очевидне запитання: " Як вдалося поліпшити мову Java?". Виявляється, це зроблено не за рахунок удосконалення власне мови програмування, а шляхом докорінної зміни бібліотек програм, написаних на мові Java. Компанія Sun Microsystems змінила все: починаючи з імен окремих бібліотечних функцій (зробивши їх більш осмисленими) і методів роботи графічних модулів ( змінивши спосіб обробки подій і частково переписавши робочі програми), і закінчуючи створенням нових властивостей мови, наприклад, засобів виведення інформації на друк, яких не було в версії Java 1.0. В результаті вийшла набагато корисніша програмна платформа, ніж всі попередні версії мови Java.

Компанія Microsoft випустила в світ свій власний продукт під назвою J ++, що має відношення до мови Java. Мова J ++ інтерпретується віртуальною машиною, сумісною з віртуальною машиною мови Java (Java Virtual Machine) при виконанні байт-коду, але інтерфейси із зовнішніми кодами у цих мов значно розрізняються. Мови J ++ і Java мають практично однаковий синтаксис. Однак компанія Microsoft створила додаткові мовні конструкції. Всі вони мають досить сумнівну цінність, за винятком інтерфейсу Windows API. Крім того, що у цих мов однаковий синтаксис, їх основні бібліотеки (рядки, утиліти, засоби мережевого програмування, засоби підтримки багатопоточності, математичні бібліотеки і т.п.), по суті, також збігаються.

Однак графічні бібліотеки, призначений для користувача інтерфейс і доступ до віддалених об'єктів у цих мов абсолютно різні. В даний час компанія Microsoft більше не підтримує мову J ++, розробивши нову мову С #, який має багато спільного з Java, але використовує іншу віртуальну машину. У цій книзі ні мову J ++, ні мову С # не описує.

Переваги мови Java

1) Одна з основних переваг мови Java - незалежність від платформи, на якій виконуються програми: Один і той же код можна запускати під управлінням операційних систем Windows, Solaris, Linux, Machintosh і ін.
Це дійсно необхідно, коли програми завантажуються через Інтернет для подальшого виконання під керуванням різних операційних систем.

2) Ще одна перевага полягає в тому, що синтаксис мови Java схожий на синтаксис мови C ++, і програмістам, які знають мови С і C ++, його вивчення не складає труднощів. Правда, для програмістів, які володіють мовою Visual Basic, Цей синтаксис, можливо, буде незвичний.

Якщо ви ніколи не програмували на мові C ++, деякі терміни, використані в цьому розділі, будуть вам незрозумілі. У цьому випадку можете пропустити його. Поки ви доберетеся до кінця глави 6, ці терміни стануть для вас звичними.

3) Крім того, Java - повністю об'єктно-орієнтована мова, навіть більшою мірою, ніж C ++. Все суті в мові Java є об'єктами, за винятком небагатьох основних типів (primitive types), наприклад чисел. (Оскільки за допомогою об'єктно-орієнтованого програмування легко розробляти складні проекти, воно замінило собою більш давнє структурне програмування. Якщо ви не знайомі з об'єктно-орієнтованим програмуванням, глави 3-6 нададуть вам всі необхідні відомості про нього.)

Однак розробити ще один, злегка поліпшений, діалект мови C ++ недостатньо. Принципово важливо, чторазрабативать програми, що не містять помилок, наязике Java легше, ніж наязике C ++. Чому? Розробники мови Java довго міркували про те, чому програми, написані на мові C ++, так схильні до помилок. Вони забезпечили мову Java засобами, що дозволяють виключити саму можливість створювати програми, в яких були б приховані найбільш поширені помилки. Для цього в мові Java зроблено наступне.

4) Виключена можливість явного виділення і звільнення пам'яті.
Пам'ять в мові Java звільняється автоматично за допомогою механізму складання сміття. Програміст гарантований від помилок, пов'язаних з неправильним використанням пам'яті.

5) Введено справжні масиви і заборонена арифметика покажчиків.
Тепер програмісти в принципі не можуть стерти дані з пам'яті внаслідок неправильного використання покажчиків.

6) Виключена можливість переплутати оператор присвоювання з оператором порівняння на рівність.
Тепер можна навіть скомпілювати вираз if (ntries \u003d 3). . . (Програмісти на мові Visual Basic можуть взагалі не помітити тут ніякої проблеми, оскільки ця помилка - джерело більшості непорозумінь в мовах С і C ++).

7) Виключено множинне спадкування. Воно замінено новим поняттям - інтерфейсом, запозиченим з мови Objective С.
Інтерфейс дає програмісту майже все, що той може отримати від множинного спадкоємства, уникаючи при цьому складнощів, що виникають при управлінні ієрархіями класів.

Характерні особливості мови Java

простий
інтерпретується
Розподілений
надійний
безпечний
Машінонезавісімий
Об'єктно-орієнтована
високопродуктивний
Багатопотоковий
динамічний
Не залежний від архітектури комп'ютера

В останньому розділі ми вже торкнулися деяких з цих пунктів. У цьому розділі ми: наведемо цитати з керівництва по мові Java, що розкривають особливості мови; поділимося з читачами міркуваннями з приводу окремих властивостей мови, грунтуючись на власному досвіді роботи з його останньою версією.

простий

Ми, хотіли створити систему, яка легко програмується, не вимагає додаткового навчання і враховує сформовану практику і стандарти програмування. Тому, незважаючи на те, що ми вважали мову C ++ невідповідним для цих цілей, мова Java був розроблений максимально схожим на нього, щоб зробити систему більш доступною. У мові Java немає багатьох рідко використовуваних, малозрозумілих і заплутаних засобів мови C ++, які, на нашу думку, приносять більше шкоди, ніж користі.

Синтаксис мови Java, по суті, являє собою очищений варіант синтаксису мови C ++. У цій мові немає заголовних файлів, арифметики покажчиків (і самих покажчиків), структур, об'єднань, перевантаження операторів, віртуальних базових класів і т.п. (Відмінності між мовами Java і C ++ описуються в зауваженнях про мову C ++, розкиданих по всій книзі.) Однак розробники не прагнули виправити всі недоліки мови C ++.

Наприклад, синтаксис оператора switch в мові Java залишився незмінним. Знаючи мову C ++, перейти до синтаксису мови Java буде легко.
Якщо зазвичай ви використовуєте візуальне середовище програмування (наприклад Visual Basic), мова Java здасться вам складним.
Його синтаксис часто виглядає досить дивним (хоча зрозуміти зміст виразу не складає труднощів). Важливіше те, що при роботі на мові Java доводиться набагато більше програмувати. Принадність мови Visual Basic полягає в тому, що його візуальне середовище програмування дозволяє майже автоматично створювати інфраструктуру додатки. Щоб досягти того ж результату за допомогою мови Java, необхідно програмувати вручну, але при цьому виходять набагато коротші програми.

Існує, однак, і третій різновид середовищ програмування, що дозволяють створювати програми за допомогою технології "перетягнути-і-опустити" ( "drag-and-drop").

Інший аспект простоти - стислість. Одна з цілей мови Java - забезпечити розробку програм, які можна було б абсолютно самостійно виконувати на невеликих машинах. Розмір основного інтерпретатора і засобів підтримки класів становить близько 40 Кбайт; стандартні бібліотеки та засоби підтримки потоків (особливо автономних микроядро (self-contained microkernel)) займають ще 17: Кбайт.
Це величезний успіх. Зауважимо, однак, що бібліотеки коштів підтримки графічного призначеного для користувача інтерфейсу значно більшими.

Об'єктно-орієнтована

Попросту кажучи, об'єктно-орієнтоване програмування - це метод програмування, в центрі уваги якого знаходяться дані (тобто об'єкти) і засоби доступу до них. Проводячи аналогію зі столярним справою, можна сказати, що об'єктно майстер в основному зосереджений на стільці, який він виготовляє, і лише в другу чергу його цікавлять інструменти, необхідні для цього; в той же час необ'ектнооріентірованний столяр думає лише про свої інструменти. Об'єктно властивості мови Java і C ++, по суті, збігаються.

Об'єктна орієнтація за минулі 30 років вже довела свою цінність, і без неї неможливо уявити собі сучасну мову програмування. Дійсно, об'єктно-орієнтовані особливості мови Java можна порівняти з мовою C ++. Основна відмінність між ними полягає в механізмі множинного спадкоємства, для якого в мові Java знайдено найкраще рішення, А також в моделі метаклассом мови Java.

Механізми відображення (глава 5) і сериализации об'єктів (глава 12) дозволяють реалізувати стійкі об'єкти і засоби для створення графічних користувацьких інтерфейсів на основі готових компонентів.

Якщо ви ніколи не програмували на об'єктно-орієнтованих мовах, уважно вивчіть глави 4-6. У цих розділах викладаються основи об'єктно-орієнтованого програмування і показуються його переваги при розробці складних проектів над такими традиційними, процедурно-орієнтованими мовами, як мова С або Basic.

Розподілений

Java володіє великою бібліотекою програм для передачі даних на основі таких протоколів TCP / IP (Transmission Control Protocol / Internet Protocol-протокол управління передачею / Інтернет-протокол), як HTTP (Hypertext Transfer Protocol - протокол передачі гіпертекстів) або FTP (File Transfer Protocol- протокол передачі файлів). Програми, написані на мові Java, можуть відкривати об'єкти і отримувати до них доступ через мережу за допомогою іURL-адрес (Uniform Resource Location - універсальний адресу ресурсу) так желегко, як ав локальної мережі.

Мова Java надає потужні і зручні засоби для роботи в мережі. Кожен, хто коли-небудь намагався писати програми для роботи в Інтернет на інших мовах, буде приємно здивований тим, як легко вирішуються на мові Java найважчі завдання, наприклад, відкриття мережевих з'єднань (sockets connection). Елегантний механізм, що складається з так званих сервлетів (servlets), робить роботу на сервері надзвичайно ефективною.

Сервлети підтримуються багатьма популярними Web- серверами. (Робота в мережі буде описана в другому томі.) Зв'язок між розподіленими об'єктами в мові Java забезпечується механізмом виклику віддалених методів (ця тема також розкривається у другому томі).

надійний

Мова Java призначений для створення програм, які повинні надійно працювати в будь-яких ситуаціях. Основна увага в мові Java приділяється ранньому виявленню можливих помилок, Динамічної перевірки (під час виконання програми), а також виключення ситуацій, схильних до помилок ... Єдине значну відмінність мови Java від мови C ++ полягає в моделі покажчиків, прийнятої в мові Java, яка виключає можливість перезапису ділянки пам'яті і пошкодження даних.

Це властивість також дуже корисно. Компілятор мови Java виявляє такі помилки, які в інших мовах виявляються тільки на етапі виконання програми. Крім того, програмісти, які витратили багато годин на пошуки помилки, що викликала пошкодження пам'яті через невірне покажчика, будуть дуже раді тому, що в мові Java такі проблеми виникнути в принципі не можуть.

Якщо раніше ви програмували на мовах Visual Basic або COBOL, в яких покажчики явно не використовуються, можливо, вам незрозуміло, чому це настільки важливо. Програмістам на мові С пощастило набагато менше. Їм потрібні покажчики для доступу до рядків, масивів, об'єктів і навіть файлів. При програмуванні на мові Visual Basic нічого цього не потрібно, і програміст може не турбуватися про розподіл пам'яті для цих сутностей. З іншого боку, багато структур даних в мові, що не має покажчиків, реалізувати дуже важко. Для звичайних структур, на зразок рядків і масивів, покажчики не потрібні. Вся міць покажчиків проявляється лише там, де без них не можна обійтися, наприклад, при створенні пов'язаних списків. Програміст на мові Java назавжди позбавлений від невірних покажчиків, неправильного розподілу і витоку пам'яті.

безпечний

Мова Java призначений для використання в мережевій або розподіленої середовищі. З цієї причини велика увага була приділена безпеці. Мова Java дозволяє створювати системи, захищені від вірусів і стороннього втручання.

У першому виданні ми написали: "Ніколи не говори ніколи", - і мали рацію. Група експертів з питань безпеки з Прінстонського університету виявила перші помилки в системі захисту версії Java 1.0 незабаром після появи у продажу першої версії набору інструментальних засобів JDK. Більш того, і вони, і інші фахівці продовжували і згодом знаходити все нові і нові помилки в механізмах безпеки всіх наступних версій мови Java.

Позитивною стороною цієї ситуації є те, що група розробників мови Java заявила про свою повну нетерпимості до будь-яких помилок в системі захисту і негайно приступила до виправлення всіх проблем, виявлених в механізмі безпеки аплетів. Зокрема, опублікувавши внутрішні специфікації інтерпретатора мови Java, компанія Sun набагато полегшила пошук прихованих помилок в системі безпеки і привернула до їх пошуку незалежних фахівців.

Це підвищило ймовірність того, що всі помилки в системі захисту будуть незабаром виявлені. У будь-якому випадку обдурити систему захисту мови Java надзвичайно важко. Виявлені досі помилки були майже невловимими, до того ж їх кількість (відносно) невелика.

Web-сторінка компанії Sun, присвячена питанням безпеки, має наступний URL-адресу: http://java.sun.com/sfaq/.

Перерахуємо деякі ситуації, виникнення яких запобігає система безпеки мови Java.

1) Переповнення стека виконуваної програми, до которюму приводив сумнозвісний "хробак", що поширювався в Інтернет.

2) Пошкодження ділянок пам'яті, які перебувають за межами простору, виділеного процесу.

3) Зчитування і запис локальних файлів при використанні безпечного завантажувача класів, наприклад Web-броузера, який забороняє такий доступ до файлів.

Всі ці заходи безпеки цілком доречні і зазвичай працюють бездоганно, проте обачність ніколи не зашкодить. Хоча виявлені до цього моменту помилки були далеко не тривіальними, і всі деталі їх пошуку часто зберігаються в секреті, слід визнати, що довести безпеку мови Java, ймовірно, псу ж неможливо.

Згодом в мову були додані нові засоби захисту. Починаючи з версії 1.1, в мові Java з'явилося поняття класів з цифровим підписом. Користуючись класом з цифровим підписом, ви можете бути впевненим в його автора. Якщо ви йому довіряєте, то можете надати цього класу все привілеї, доступні на вашій машині.

Альтернативний механізм доставки коду, запропонований компанією Microsoft, спирається на технологію ActiveX і для безпеки використовує тільки цифрові підписи. Очевидно, що цього недостатньо-будь-який користувач програмного забезпечення фірми Microsoft може підтвердити, що програми широко відомих виробників часто завершуються аварійно, створюючи тим самим небезпеку пошкодження даних. Система безпеки в мові Java набагато надійніше, ніж технологія ActiveX, оскільки вона контролює додаток з моменту його запуску і не дозволяє йому завдавати шкоди.

Не залежний від архітектури

Компілятор генерує об'єктний файл, формат якого не залежить від архітектури комп'ютера, - скомпільована програма може виконуватися на будь-яких процесорах під управлінням системи виконання програм мови Java. Для цього компілятор мови Java генерує команди, байт-коду, які не залежать від конкретної архітектури комп'ютера. Байт код розроблений таким чином, щоб на будь-якій машині його можна було легко інтерпретувати або на льоту перевести в машіноза висимо код.

Це не нова ідея. Більше 20 років тому і в системі реалізації мови Pascal, розробленої Ніклаус Віртом (Niclaus Wirth), і в системі UCSD Pascal застосовувалася та ж сама технологія. Використання байт-кодів дає великий виграш при виконанні програми (правда, синхронна компіляція в багатьох випадках його компенсує). Розробники мови Java прекрасно впоралися з розробкою набору команд байт-коду, які відмінно працюють на більшості сучасних комп'ютерів, Легко транслюючись в реальні машинні команди.

Машінонезавісімий

На відміну від мов С і C ++, в специфікації Java немає аспектів, що залежать від системи реалізації. І розмір основних типів даних, і арифметичні операції над ними точно визначені.

Наприклад, тип int в мові Java завжди означає 32-розрядний ціле число. У мовах С і C ++ тип int може означати як 16-розрядний, так і 32-розрядний ціле число, а також ціле число довільного розміру, по вибору розробника конкретного компілятора. Єдине обмеження полягає в тому, розмір типу int не може бути меншою за розмір типу short int і більше розміру типу long int. Фіксований розмір числових типів дозволяє уникнути багатьох неприємностей, пов'язаних з виконанням програм на різних комп'ютерах. Бінарні дані зберігаються і передаються у фіксованому форматі, що також дозволяє уникнути непорозумінь, пов'язаних з різним порядком запису байтів на різних платформах (конфлікт "big endian / little endian"). Рядки зберігаються в стандартному форматі Unicode.

Бібліотеки, що представляють собою частина системи, визначають машінонезавісімий інтерфейс. Наприклад, в мові передбачений абстрактний клас Window і його реалізації для операційних систем Unix, Windows і Macintosh.

Кожен, хто коли-небудь намагався написати програму, яка однаково добре працювала б під управлінням операційних систем Windows, Macintosh і десяти різновидів системи Unix, знає, що це дуже важке завдання. Версія Java зробила героїчну спробу вирішити цю проблему, надавши простий інструментальний набір, що адаптує звичайні елементи призначеного для користувача інтерфейсу до великої кількості програмних платформ. На жаль, бібліотека, на яку було витрачено чимало праці, не дозволила досягти прийнятних результатів на різних платформах. (При цьому на різних платформах в графічних програмах виявлялися різні помилки.)

Однак це було лише початком. У багатьох додатках машинна незалежність набагато важливіше вишуканості графічного призначеного для користувача інтерфейсу. Саме ці додатки виграли від появи версії Java 1.0. Однак тепер інструментальний набір для створення графічного інтерфейсу повністю перероблений і більше не залежить від інтерфейсу користувача на головному комп'ютері. Нова версія більш осмислена і, на нашу думку, більш приваблива для користувача, ніж попередні.

інтерпретується

Інтерпретатор мови Java може пересилатися на будь-яку машину і виконувати байт-код безпосередньо на ній. Оскільки редагування зв'язків - більш легкий процес, розробка програм може стати набагато швидше і ефективніше.

Можливо, це дає перевагу при розробці додатків, однак наведена цитата - явне перебільшення. У будь-якому випадку компілятор мови Java, що входить в набір інструментальних засобів JSDK (Java Software Development Kit), працює досить повільно. (Деякі компілятори, що належать до третього різновиду, наприклад, компілятори компанії IBM, працюють набагато швидше.) Швидкість перекомпіляції - це всього лише один з факторів, що характеризують ефективність середовища програмування. Порівнявши швидкість роботи середовищ програмування на мові Java і мовою Visual Basic, ви, можливо, будете розчаровані.

високопродуктивний

Хоча зазвичай інтерпретуються байт-коди мають більш ніж достатню продуктивність, бувають ситуації, в яких потрібно ще більш висока ефективність. Байт-коди можна "на льоту" (під час виконання) транслювати в машинні коди для конкретного процесора, на якому виконується цю програму.

Якщо для виконання байт-кодів застосовується інтерпретатор, не слід вживати словосполучення " висока продуктивність". Однак на багатьох платформах можливий інший вид компіляції, що забезпечується синхронними компиляторами (just-in-time compilers-JIT). Вони транслюють байт-код в машінозавісімий код, зберігають результат в пам'яті, а потім викликають його при необхідності. Оскільки при цьому інтерпретація виконується тільки один раз, цей підхід у багато разів збільшує швидкість роботи.

Незважаючи на те що синхронні компілятори все одно повільніше, ніж машінозавісімие компілятори, вони у всякому разі працюють набагато швидше інтерпретаторів, забезпечуючи для деяких програм 10- і навіть 20-кратне прискорення. Ця технологія постійно вдосконалюється і врешті-решт може досягти тієї швидкості, яку ніколи не перевершать традиційні компілятори. Наприклад, синхронний компілятор може визначити, який фрагмент коду виконується частіше, і оптимізувати його за швидкістю виконання.

багатопоточн

Забезпечує кращу інтерактивність і виконання програми.

Якщо ви коли-небудь намагалися організувати багатопотокові обчислення на якому-небудь ще мовою програмування, ви будете приємно здивовані тим, як це легко зробити на мові Java. Потоки в мові Java можуть використовувати переваги багатопроцесорних систем, якщо операційна система дозволяє це зробити. На жаль, реалізації потоків на більшості платформ сильно відрізняються один від одного, а розробники мови Java не роблять ніяких спроб досягти однаковості. Тільки код для виклику потоків залишається однаковим для всіх машин; мова Java перекладає реалізацію багатопоточності на базову операційну систему або бібліотеку потоків. (Потоки описуються в другому томі.) Не дивлячись на це, саме легкість організації багатопоточних обчислень робить мову Java таким привабливим для розробки програмного забезпечення серверів.

динамічний

Багато в чому мову Java є більш динамічним, ніж мови С або C ++. Він був розроблений так, щоб легко адаптуватися до постійно мінливому середовищі. У бібліотеки можна вільно додавати нові методи і об'єкти, не завдаючи ніякої шкоди. Мова Java дозволяє легко отримувати інформацію про хід виконання програми.

Це дуже важливо в тих випадках, коли потрібно додати код в уже виконувану програму. Яскравим прикладом цього є код, який завантажується з Інтернет для виконання оглядачем. У версії Java 1.0 отримати інформацію про хід виконуваної програми було зовсім не легко, проте нинішня версія мови Java розкриває перед програмістом як структуру, так і поведінку об'єктів виконуваної програми.
Це дуже цінно для систем, які повинні аналізувати об'єкти в ході виконання програми. До таких систем відносяться засоби створення графічного інтерфейсу користувача, інтелектуальні отладчики, змінні компоненти і об'єктні бази даних.

Мова Java та Інтернет

Ідея проста-користувачі завантажують байт-коди мови Java з Інтернет і виконують їх на своїх машинах. Програми Java, які працюють під управлінням Web-браузерів, називаються апплетами. Для використання аплету потрібен Web-броузер, що підтримує мову Java і здатний інтерпретувати байт-коди. Ліцензія на вихідні коди мови Java належить компанії Sun, яка наполягає на незмінності як самої мови, так і структури його основних бібліотек. На жаль, в реальності все не так. Різні версії браузерів Netscape і Internet Explorer підтримують різні версії мови Java, причому деякі з цих версій значно застаріли. Ця гідна жалю ситуація створює все більше перешкод при розробці аплетів, що дозволяють використовувати переваги останньої версії мови Java. Щоб вирішити цю проблему, компанія Sun розробила програму Java Plug-in, що дозволяє створювати найбільш сучасне середовище для запуску програм на мові Java на основі браузерів Netscape і Internet Explorer.

Завантаження аплету нагадує впровадження зображення в Web-сторінку. Аплет стає частиною сторінки, а текст обтікає зайняте їм простір. Однак відмінність полягає в тому, що зображення тепер є живим (alive). Воно реагує на команди користувача, змінює свій зовнішній вигляд і забезпечує пересилку даних між комп'ютером, на якому проглядається аплет, і комп'ютером, керуючим цим апплетом.

Завантаження аплету нагадує вставку малюнка в Web-сторінку. Аплет стає частиною сторінки, а текст обтікає займане ним місце. Справа в тому, що зображення є "живим". Воно реагує на команди користувача, змінює свій зовнішній вигляд і виконує пересилку даних між комп'ютером, на якому виконується аплет, і комп'ютером, керуючим цим апплетом.

На рис. 1.1 показаний хороший приклад динамічної Web-сторінки, яка виконує складні обчислення і застосовує аплет для зображення молекул. Щоб краще зрозуміти структуру молекули, можна обертати її або змінювати масштаб зображення, використовуючи мишу. Такі маніпуляції не можна реалізувати на статичних Web- сторінках, однак аплети роблять це можливим. (Цей аплет можна знайти за адресою http: //jmol.sourceforge.net.)

Рис. 1.1. аплет Jmol

За допомогою аплетів на Web-сторінку можна додавати нові кнопки і текстові поля. Однак такі аплети повільно завантажуються по телефонній лінії.

Майже те ж саме можна зробити за допомогою мови Dynamic HTML, форм мови HTML (Hypertext Markup Language - мова розмітки гіпертекстів) або мови сценаріїв, наприклад, мови JavaScript. Зрозуміло, перші аплети призначалися для анімації: обертові глобуси, танцюючі персонажі мультфільмів, чудернацькі тексти і т.п. Однак більшість з перерахованого можуть робити і анімовані GIF-файли, а мова Dynamic HTML в поєднанні з розробкою сценаріїв робить набагато більше, ніж аплети.

В результаті несумісності браузерів і неузгодженості процесу завантаження через повільні мережеві з'єднання аплети, призначені для Web-сторінок, не стали величезним досягненням. У локальних мережах (intranets) ситуація зовсім інша. У них зазвичай не виникають проблеми, пов'язані з пропускною здатністю каналу, тому час завантаження аплетів несуттєво. У локальній мережі можна вибирати потрібний броузер або застосовувати програму Java Plug-In. Співробітники не можуть перемістити програму, доставлену через мережу, в неправильне місце або невірно її встановити, а системному адміністратору не потрібно обходити всі клієнтські машини і оновлювати на них програми. Велика кількість програм, призначених для обліку товарів, планування відпустки, відшкодування транспортних витрат тощо, були розроблені багатьма корпораціями у вигляді аплетів, що використовують броузери.

Поки ми писали книгу, маятник знову хитнувся від клієнтських програм в сторону програмування серверних додатків (server-side programming). Зокрема, прикладні сервери (application servers) можуть використовувати моніторингові можливості віртуальної машини Java для автоматичного вирівнювання навантаження, об'єднання зв'язків з базою даних, синхронізації об'єктів, безпечного завершення роботи браузера і завантажити цю, а також для виконання інших процесів, необхідних для масштабованих серверних додатків, які майже неможливо коректно реалізувати. Таким чином, програмісти, що створюють додатки, отримали можливість купити ці складні механізми, замість того, щоб розробляти їх самотужки. Це підвищило продуктивність праці програмістів - вони зосередилися на логіці своїх програм, не відволікаючись на деталі, пов'язані з роботою серверів.

Java - так називають не тільки сама мова, але і платформу для створення додатків рівня підприємств на основі даної мови.

Спочатку мова програмування називався Oak (рос. дуб) І розроблявся Джеймсом Гослінгом для побутової електроніки, але згодом був перейменований в Java і став використовуватися для написання клієнтських додатків і серверного програмного забезпечення. Названий на честь марки кави Java, коханого програмістами, тому на офіційній емблемі мови Java зображена чашка з паруючим кави.

Основні особливості мови

Останнім релізом є версія 1.6, в якій було вироблено поліпшення системи безпеки, поліпшення підтримки скриптового мови Mozilla Rhino (англ.), Поліпшена інтеграція з робочим столом, додані деякі нові можливості в створенні графічних інтерфейсів.

Java і Microsoft

Наступні компанії в основному фокусуються на Java (J2EE) технологіях, а не на .NET, хоча мають справу також і з останніми: IBM, Oracle. Зокрема, СУБД Oracle включає JVM як свою складову частину, що забезпечує можливість безпосереднього програмування СУБД на мові Java, включаючи, наприклад, збережені процедури.

Основні можливості

приклад програми

Програма, що виводить «Hello, World!»:

Public class HelloWorld (public static void main (String args) (System .out .println ( "Hello, World!");))

Приклад використання шаблонів:

Import java.util. *; public class Sample (public static void main (String args) ( // Створення об'єкта за шаблоном. List strings \u003d new LinkedList (); strings.add ( "Hello"); strings.add ( "world"); strings.add ( "!"); for (String s: strings) (System .out .print (s); System .out .print ( "");)))

Основні ідеї

примітивні типи

У мові Java тільки 8 скалярних типів: boolean, byte, char, short, int, long, float, double.

Класи-обгортки примітивних типів

Довжини і діапазони значень примітивних типів визначаються стандартом, А не реалізацією і наведені в таблиці. Тип char зробили двобайтовим для зручності локалізації (один з ідеологічних принципів Java): коли складався стандарт, вже існував Unicode -16, але не Unicode-32. Оскільки в результаті не залишилося однобайтового типу, додали новий тип byte. Типи float і double можуть мати спеціальні значення, і «не число» (

Тип Довжина (в байтах) Діапазон або набір значень
boolean не визначене true, false
byte 1 −128..127
char 2 0..2 16 -1, або 0..65535
short 2 -2 15 ..2 15 -1, або -32768..32767
int 4 -2 31 ..2 31 -1, або -2147483648..2147483647
long 8 -2 63 ..2 63 -1, або приблизно -9.2 × 10 18 ..9.2 х 10 18
float 4 - (2-2 -23) · 2 127 .. (2-2 -23) · 2 127, або приблизно -3.4 · 10 38 ..3.4 · 10 38, а також,, NaN
double 8 - (2-2 -52) • 2 1023 .. (2-2 -52) • 2 1023, або приблизно -1.8 × 10 308 ..1.8 х 10 308, а також,, NaN

Така жорстка стандартизація була необхідна, щоб зробити мову переносних незалежним, що є одним з ідеологічних вимог до Java і однією з причин її успіху. Проте одна невелика проблема з платформної незалежністю все ж залишилася. Деякі процесори використовують для проміжного зберігання результатів 10-байтові регістри або іншими способами покращують точність обчислень. Для того, щоб зробити Java максимально сумісної між різними системами, В ранніх версіях будь-які способи підвищення точності обчислень були заборонені. Однак це призводило до зниження швидкодії. З'ясувалося, що погіршення точності заради платформної незалежності мало кому потрібно, тим більше якщо за це доводиться платити уповільненням роботи програм. Після численних протестів ця заборона скасували, але додали ключове слово strictfp, що забороняє підвищення точності.

Перетворення при математичних операціях

У мові Java діють наступні правила:

  1. Якщо один операнд має тип double, інший теж перетвориться до типу double.
  2. Інакше, якщо один операнд має тип float, інший теж перетвориться до типу float.
  3. Інакше, якщо один операнд має тип long, інший теж перетвориться до типу long.
  4. Інакше обидва операнда перетвориться до типу int.

Останнє правило відрізняє Java від старих реалізацій і C ++ і робить код більш безпечним. Так, наприклад, в мові Java після виконання коду

Short x \u003d 50, y \u003d 1000; int z \u003d x * y;

змінної z присвоюється значення 50000, а не -15536, як в більшості безнадійно застарілих реалізацій C і C ++. У програмі, компільованою MS VC ++, починаючи з версії 7, а також багатьма іншими сучасними компіляторами (gcc, Intel C ++, Borland C ++, Comeau і т. Д.), Значення буде також одно 50000.

Об'єктні змінні, об'єкти, посилання і покажчики

У мові Java є тільки динамічно створювані об'єкти. Причому змінні об'єктного типу і об'єкти в Java - абсолютно різні сутності. Змінні об'єктного типу є посиланнями, тобто неявними покажчиками на динамічно створювані об'єкти. Це підкреслюється синтаксисом опису змінних. Так, в Java не можна писати:

Double a [10] [20]; Foo b (30);

Double a \u003d new double [10] [20]; Foo b \u003d new Foo (30);

При привласнення, передачі в підпрограми і порівняннях об'єктні змінні поводяться як покажчики, тобто присвоюються, копіюються і порівнюються адреси об'єктів. А при доступі за допомогою об'єктної змінної до полів даних або методам об'єкта не потрібно ніяких спеціальних операцій разименовиванія - цей доступ здійснюється так, як якщо б об'єктна змінна була самим об'єктом.

Об'єктними є змінні будь-якого типу, крім простих числових типів. Явних покажчиків в Java немає. На відміну від покажчиків C, C ++ та інших мов програмування, посилання в Java у високому ступені безпечні завдяки жорстким обмеженням на їх використання, зокрема:

  • Не можна перетворювати об'єкт типу int або будь-якого іншого примітивного типу в покажчик або посилання і навпаки.
  • Над посиланнями заборонено виконувати операції ++, -, +, - або будь-які інші арифметичні операції.
  • Перетворення типів між посиланнями жорстко регламентовано. За винятком посилань на масиви, дозволено перетворювати посилання тільки між спадкоємною типом і його спадкоємцем, причому перетворення успадкованого типу в успадковує має бути явно задано і під час виконання проводиться перевірка його свідомості. Перетворення посилань на масиви дозволені лише тоді, коли дозволені перетворення їх базових типів, а також немає конфліктів розмірності.
  • У Java немає операцій взяття адреси (&) або взяття об'єкта за адресою (*). Зірочка в Java означає множення, і тільки. Амперсанд (&) означає всього лише «побітовое і» (подвійний амперсанд - «логічне і»).

Завдяки таким спеціально введеним обмеженням в Java неможливо пряме маніпулювання пам'яттю на рівні фізичних адрес (хоча посилання, які не вказують ні на що, є: значення такого посилання позначається null).

Дублювання посилань і клонування

Через те, що об'єктні змінні є посилальними, при присвоєнні не відбувається копіювання об'єкта. Так, якщо написати

Foo foo, bar; ... bar \u003d foo;

то відбудеться копіювання адреси з змінної foo в змінну bar. Тобто foo і bar вказуватимуть на одну і ту ж область пам'яті, тобто на один і той же об'єкт; спроба змінити поля об'єкта, на який посилається змінна foo, буде змінювати об'єкт, з яким пов'язана змінна bar, і навпаки. Якщо ж необхідно отримати саме ще одну копію вихідного об'єкта, користуються або методом (функцією-членом, в термінології C ++) clone (), що створює копію об'єкта, або ж копіюють конструктором.

Метод clone () вимагає, щоб клас реалізовував інтерфейс Cloneable (про інтерфейси див. Нижче). Якщо клас реалізує інтерфейс Cloneable, за замовчуванням clone () копіює всі поля ( дрібна копія). Якщо потрібно не копіювати, а клонувати поля (а також їх поля і так далі), треба перевизначати метод clone (). Визначення і використання методу clone () часто є нетривіальним завданням.

Прибирання сміття

У мові Java неможливо явне видалення об'єкта з пам'яті - замість цього реалізована збірка сміття. Традиційним прийомом, що дає збирачеві сміття «натяк» на звільнення пам'яті, є присвоювання змінної порожнього значення null. Це, однак, не означає, що об'єкт, замінений значенням , буде неодмінно і негайно видалений. Даний прийом всього лише усуває посилання на об'єкт, тобто відв'язує покажчик від об'єкта в пам'яті. При цьому слід враховувати, що об'єкт не буде видалений складальником сміття, поки на нього вказує хоча б одне посилання з використовуваних змінних або об'єктів. Існують також методи для ініціації примусової збірки сміття, але не гарантується, що вони будуть викликані виконуючою середовищем, і їх не рекомендується використовувати для звичайної роботи.

Класи і функції

Java не є процедурним мовою: будь-яка функція може існувати тільки всередині класу. Це підкреслює термінологія мови Java, де немає понять «функція» або «функція-член» (англ. member function), А тільки метод. В методи перетворилися і стандартні функції. Наприклад, в Java немає функції sin (), а є метод Math.sin () класу Math (що містить, крім sin (), методи cos (), exp (), sqrt (), abs () і багато інших).

Статичні методи і поля

Для того щоб не треба було створювати об'єкт класу Math (і інших аналогічних класів) кожен раз, коли треба викликати sin () (і інші подібні функції), введено поняття статичних методів (Англ. static method; іноді в російській мові вони називаються статичними). Статичний метод (що відзначається ключовим словом static в описі) можна викликати, не створюючи об'єкта його класу. Тому можна писати

Double x \u003d Math .sin (1);

Math m \u003d new Math (); double x \u003d m.sin (1);

Обмеження, що накладаються на статичні методи, полягає в тому, що в об'єкті this вони можуть звертатися тільки до статичних полів і методів.

Статичні поля мають таке ж значення, що і в C ++: кожне існує тільки в єдиному екземплярі.

фінальний

Ключове слово final (фінальний) означає різні речі при описі змінної, методу або класу. Фінальна змінна (іменована константа) инициализируется при описі і далі не може бути змінена. Фінальний метод не може бути перевизначений при спадкуванні. Фінальний клас не може мати спадкоємців взагалі.

абстрактність

В Java методи, які не оголошені явно як final або private, є віртуальними в термінології C ++: при виклику методу, по-різному певного в базовому і спадщини класах, завжди проводиться перевірка часу виконання.

Абстрактним методом (описувач abstract) в Java називається метод, для якого задані параметри і тип значення, що повертається, але не тіло. Абстрактний метод визначається в класах-спадкоємців. У C ++ те ж саме називається чисто віртуальної функцією. Для того щоб в класі можна було описувати абстрактні методи, сам клас теж повинен бути описаний як абстрактний. Об'єкти абстрактного класу створювати не можна.

Java-самовчитель

Основи програмування на мові Java

Загальні відомості про програмування

Програмування-це процес створення коду на будь-якій мові програмування, що перекладається в файли різних типів за допомогою особливої \u200b\u200bпрограми - транслятора. Існують два типи трансляторів: компілятори та інтерпретатори. Компілятор- це програма, яка переводить текст, написаний на мові програмування, в який-небудь файл. Інтерпретатор - це програма, здатна переводити текст будь-якої програми в машинний код і одночасно виконувати її.

Програмування на Java (Він є компілюються мовою) має ту перевагу, що код, написаний на даній мові програмування, перекладається за допомогою відповідної програми-транслятора в так званий байт-код, а він, у свою чергу, - в машинний код за допомогою віртуальної машини Java ( Java Virtual Machine, або просто JVM). Тому написана на Java програма виконуваність на будь-якому комп'ютері з будь-якою системою, аби на ньому була встановлена \u200b\u200bвіртуальна машина Java. Таким чином і забезпечується одна з головних переваг мови Java - переносимість створюваних на ньому програм на комп'ютери різних типів.

Програмування буває двох типів: системне і прикладне.
Системне програмування дозволяє нам програмувати в системі, наприклад в Windows, з метою вирішення глобальних завдань.
прикладне програмування направлено на створення прикладних програм, тобто програм, що виконують якусь певну функцію, наприклад Microsoft Word, WordPad, Calculator і т.д. У цій книзі ми будемо займатися прикладним програмуванням.

Java (тобто Ява) - це острів в Індонезії, сорт кави і мову програмування. Три абсолютно різні значення, і всі вони по-своєму важливі. Втім, для більшості програмістів інтерес представляє саме мова програмування Java. За останні кілька років (починаючи з кінця 1995 р) Java зміг завоювати співтовариство розробників. Її феноменальний успіх зробив Java найшвидше мовою програмування за всю історію. Навколо мови і його можливостей створилася досить великий галас. І багато програмістів, а також кінцеві користувачі, не до кінця розуміють, що ж представляє із себе і які можливості надає мову Java.

Java - це революційний мову програмування

Якості, які роблять Java настільки привабливим, є і в інших мовах програмування. Багато мови ідеально підходять для певних типів додатків. Навіть більше, ніж Java. Але Java зібрав всі ці якості разом, в одній мові. Для індустрії розробки програмного забезпечення - це революційний стрибок вперед.

Давайте докладніше поглянемо на деякі з властивостей цієї мови:

  • об'єктно-орієнтованість
  • переносимість
  • підтримка багатопоточності
  • автоматична «прибирання сміття»
  • надійність
  • підтримка роботи з мережею і «Інтернетом»
  • простота і легкість у використанні

Об'єктно-орієнтованість

Багато мови, що виникли до Java, такі як C і Pascal, були процедурними мовами. Процедури (або функції) - це блоки коду, які були частиною модуля або програми. У процедури передавалися параметри (примітивні типи даних: цілі числа, символи, рядки і числа з плаваючою комою). Код оброблявся окремо від даних. Вам доводилося передавати структури даних, а процедури могли з легкістю змінювати їх вміст. Через це виникало багато проблем, оскільки використання одних частин програми в інших її частинах могло давати непредсказумие результати. На пошуки несправної процедури йшло величезна кількість часу і зусиль. Особливо, коли справа стосувалася великих програм.

Деякі з процедурних мов дозволяли навіть отримати адресу даних в пам'яті. Знаючи цю адресу, можна було зчитувати або дописувати дані через деякий час, або випадково записати нову інформацію поверх старої.

Java - це об'єктно-орієнтована мова. Об'єктно-орієнтована мова працює з об'єктами. Об'єкти містять дані (поля) і код (методи). Кожен об'єкт належить певному класу, Який є «кресленням», що описує поля і методи, які пропонує об'єкт. В Java практично будь-яка змінна є об'єктом того чи іншого виду - навіть рядка. Об'єктно-орієнтоване програмування вимагає іншого типу мислення, але такий спосіб розробки ПЗ краще, ніж процедурне програмування.

На сьогоднішній день існує безліч популярних об'єктно-орієнтованих мов. Деякі з них були спочатку розроблені як об'єктно-орієнтовані, наприклад, Java і Smalltalk. Інші, такі як C ++, є частково об'єктно-орієнтованими і частково процедурними. В С ++ ви як і раніше можете перезаписати вміст структур даних і об'єктів, що призведе до збою програми. На щастя, Java забороняє прямий доступ до вмісту пам'яті, тим самим створюючи більш надійну систему.

переносимість

Більшість мов програмування спроектовані під конкретну операційну систему і процесор. при компіляції вихідний код (Інструкції, з яких будується програма) перетворюється в машинний код, Який може бути виконаний тільки на пристроях певного типу. Цей процес породжує «внутрішній код», який працює неймовірно швидко.

Є й інші типи мов - інтерпретовані. Інтерпретується код зчитується програмним додатком (інтерпретатором), яке виконує зазначені дії. Інтерпретується код найчастіше компілювати не потрібно - він транслюється в міру виконання. Через це інтерпретується код працює досить повільно, але він дозволяє переносити програми між різними операційними системами і процесорами з різною архітектурою.

Java бере від обох технік найкраще. Код Java компілюється в платформо-незалежний машинний код, який називається Java-байткод. Спеціальний інтерпретатор, Віртуальна машина Java або «Java Virtual Machine (JVM)» зчитує і обробляє байткод. На Рис. 1 представлена \u200b\u200bсхема невеликого додатки на Java. Байткод, зазначений стрілкою, представлений в текстовому вигляді, але при компіляції для економії місця він представляється у вигляді байтів.



Рис. 1 - Розбирання байткода для «HelloWorld»

Підхід, який використовує Java, надає кілька значних переваг над інтерпретуються мовами. По-перше, вихідний код захищений від перегляду і зміни - користувачам доступний тільки байткод. По-друге, механізми захисту можуть просканувати байткод на ознаки зміни або наявності шкідливого коду, доповнюючи інші захисні механізми Java. Втім, найголовніше - це те, що код Java можна скомпілювати всього один раз, і після цього запускати на будь-якому пристрої або операційній системі, що підтримує Java Virtual Machine (JVM). Код Java можна запускати в системах Unix, Windows, Macintosh і навіть Palm Pilot. Java можна запускати навіть в веб-браузері або на веб-сервері. Переносимість дозволяє написати додаток всього один раз, а потім запускати його на безлічі різних пристроїв. Це дозволяє заощадити багато часу і коштів.

Нить

Якщо ви коли-небудь писали складні додатки на C або на PERL, то, швидше за все, ви вже стикалися з концепцією декількох процесів. Додаток може ділити себе на окремі копії, що працюють паралельно. Кожна копія дублює код і дані, що веде до збільшення споживання пам'яті. Змусити ці копії взаємодіяти досить непросто. Створення кожного процесу вимагає звернення до операційної системи, що зайвий раз витрачає час роботи ЦПУ.

Набагато кращим методом є використання декількох виконуваних потоків, скорочено званих просто потоками. Потоки можуть мати загальні дані і код, що спрощує передачу даних між екземплярами потоку. Крім того, вони використовують менше пам'яті і ресурсів ЦПУ. Деякі мови, наприклад C ++, підтримують потоки, але реалізувати їх дуже складно. В Java підтримка многопоточного виконання є вбудованої. Потоки вимагають трохи іншого способу мислення, але зрозуміти їх дуже легко. Підтримка потоків в Java дуже проста у використанні, і вони досить часто застосовуються в додатках і апплетах.

Автоматична «прибирання сміття»

Ні, мова не про винесення сміття з хати (хоча було б непогано мати комп'ютер, який би справлявся із завданнями такого роду). Термін «прибирання сміття» відноситься до утилізації невикористаних ділянок пам'яті. Коли додатки створюють об'єкти, JVM виділяє області пам'яті для їх зберігання. Якщо об'єкт більше не потрібен (на нього не існує посилань), ця область пам'ять згодом може бути використана ще раз.

Такі мови як C ++ вимагають від програмістів вручну виділяти і очищати пам'ять для даних і об'єктів. Це ускладнює програму і веде до виникнення іншої проблеми - витоків пам'яті. Коли програмісти забувають очищати пам'ять, кількість вільної пам'яті, доступної для використання, зменшується. Програми, в яких об'єкти часто створюються і знищуються, можуть з часом заповнити всю доступну пам'ять. В Java програмісту не потрібно піклуватися про такі речі, оскільки JVM проводить автоматичну «збірку сміття» для об'єктів.

надійність

Безпека грає в Java дуже важливу роль. оскільки аплети Java завантажуються віддалено і виконуються в браузері, безпеки приділяється багато уваги. Ми б не хотіли, щоб аплети отримували доступ до наших особистих документів, могли видаляти наші файли або завдавати будь-якої шкоди. На рівні API існують суворі обмеження щодо безпеки, коли мова йде про доступ аплетів до файлів і до мережі. Крім того, для перевірки цілісності завантаженого коду є підтримка цифрових підписів. На рівні байткода перевіряються очевидні зломи, такі як маніпуляція стеком або невірний байткод. Потужні механізми забезпечення безпеки в Java допомагають захиститися від ненавмисних або навмисних порушень безпеки, але важливо не забувати, що ідеальних систем не буває. Найслабшою ланкою в цьому ланцюзі є Java Virtual Machine, в якій все і працює - JVM може бути схильна до атак, оскільки у неї є відомі слабкі сторони. Варто відзначити, що хоча в JVM і було знайдено кілька вразливостей, таке відбувається дуже рідко і зазвичай швидко виправляється.

Підтримка роботи з мережею і «Інтернетом»

Java створювався з оглядкою на «Internet» і на підтримку мережевого програмування. API Java надає велику підтримку мережевих функцій, від гнізд і IP-адрес до URL і HTTP. Немає нічого простішого, ніж написати на Java мережеве додаток. При цьому отриманий код можна буде перенести на будь-яку платформу. У таких мовах як C / C ++ код, який працює з мережею, потрібно переписувати заново для кожної операційної системи, І зазвичай він має більш складну структуру. Підтримка роботи з мережею в Java дозволяє заощадити багато часу і сил.

Java підтримує і більш екзотичні види мережевого програмування, наприклад, віддалений виклик методів (RMI), узагальнену архітектуру обробника об'єктних запитів (CORBA) і архітектуру розподілених систем Jini. Ці технології розподілених систем роблять Java привабливим мовою для масштабних проектів.

Простота і легкість у використанні

Мова Java своїм корінням сягає в мову C ++. C ++ дуже популярний і широко поширений. І, тим не менш, він вважається складною мовою, мають такі функциии, як множинне спадкування, шаблони і покажчики, які є контр-продуктивними. У свою чергу, Java - це скоріше «чисто» об'єктів-орієнтована мова. Тут немає доступу до покажчиків пам'яті, а замість них використовуються посилання на об'єкти. Підтримку множинного спадкоємства теж прибрали. Це дозволило добитися більш зрозумілих і простих схем класів. Бібліотеки введення / виведення і роботи з мережею дуже прості у використанні. API Java надає розробникам велику кількість коду для економії їх часу (функції роботи з мережею та структури даних). Попрацювавши з Java деякий час, більшість розробників неохоче повертаються до інших мов через простоту і елегантності Java.

висновок

Java дає розробникам безліч переваг. Незважаючи на те, що багато хто з них є та іншими мовами, в мові Java вони зібрані разом. Швидке зростання Java став воістину феноменальним, і він як і раніше не збирається знижувати оберти. У наступній стаття ми поговоримо про серце Java - Java Virtual Machine.