Java (праграмная плятформа)

**Java** — сямейства праграмных прадуктаў і спэцыфікацыяў ад кампаніі Sun Microsystems, якія разам складаюць праграмную плятформу для распрацоўкі дастасоўнага апраграмаваньня й разгортваньня яго ў кросплятформеным асяродзьдзі. Розныя рэалізацыі плятформы Java дазваляюць ствараць праграмнае забесьпячэньне для прыладаў шырокага спэктру складанасьці: ад убудаваных прыладаў і мабільных тэлефонаў да сэрвэраў і супэркампутараў. Найбольшае распаўсюджаньне Java атрымала ў пабудове праграмных сродкаў для абслугоўваньня патрэбаў вялікіх прадпрыемстваў, у мабільных і сэрвэрных вэб-тэхналёгіях, радзей Java выкарыстоўваецца на настольных кампьютарах, а ў выпадках, калі патрэбна забясьпечыць павышаную функцыянальнасьць і бясьпеку, — дзеля прагляду вэб-старонак. Java не выкарыстоўвае такіх нізкаўзроўневых канструкцыяў, як указальнікі; праца з памяцьцю аблегчаная тым, што ўсе аб’екты — гэта спасылковыя тыпы, экзэмпляры якіх месьцяцца ў купе. За кіраваньнем выкарыстоўваньня памяці адказвае віртуальная машына Java пры дапамозе аўтаматызаванага зборцы сьмецьця.

## Плятформа
Згодна з канцэпцыяй «напісана адзін раз, працуе ўсюды», праграма, напісаная для плятформы Java, кампілюецца не ў машынны код, а ў байт-код, асяродкам выкананьня для якога зьяўляецца Java Runtime Environment(JRE). Віртуальная машына Java (JVM) — частка JRE — інтэрпрэтуе байт-код у машынныя інструкцыі, спэцыфічныя для той апаратнай і праграмнай плятформы, для якой рэалізаваная дадзеная вэрсія JRE. Такім чынам дасягаецца кросплятформенасьць праграмнага забесьпячэньня, напісанага для Java.
* Java Card: тэхналёгія, якая дазваляе запускаць у асяродку павышанае бясьпекі Java-праекты на смарт-картах і іншых прыладах, якія максымальна абмежаваныя ў памяці й выканаўчых магчымасьцях
* Java ME: набор тэхналёгіяў і спэцыфікацыяў, прызначаных для невялікіх прыладаў, якія абмежаваныя ў памяці, спажываньні энэргіі, маюць невялікі дысплэй. Зь цягам часу былі вылучаныя дзьве галіны гэтае плятформы: Connected Limited Device Configuration (CLDC) з асаблівай увагай на невялікія мабільныя тэлефоны й Connected Device Configuration (СDС) для прыладаў, якія ня так моцна абмежаваныя ў рэсурсах і маюць пашыраныя магчымасьці, напрыклад, смартфоны.
* Java SE: базавая плятформа, якая можа быць выкарыстаная й на ўсталяваных прыладах, і на хатніх кампутарах, і на вялікіх сэрвэрах
* Java EE: плятформа, якая прапануе шырокі функцыянал, неабходны для пабудовы маштабуемых праграмных прадуктаў, якія забясьпечваюць вэб-патрэбы й патрэбы вялікіх прадпрыемстваў, як сэрвэрнае ПЗ

### Java Virtual Machine
Канцэпцыя віртуальнае машыны Java ляжыць у аснове ўсёй Java-плятформы. Java-праграмы кампілююцца ў байт-код, аднолькавы для ўсіх апаратных асяродзьдзяў, бо інтэрпрэтатарам кода зьяўляецца JVM. Першапачаткова JVM проста правярала на бясьпеку й выконвала байт-код, які на ёй запускаецца, але, пачынаючы з вэрсіі 1.2, якая выйшла ў 1998 годзе, кампанія Sun выпускае віртуальныя машыны Java, у склад якіх уключаны кампілятар часу выкананьня (just-in-time альбо JIT compiler). Гэтая тэхналёгія дазваляе пад час выкананьня аналізаваць уваходны байт-код. Часткі праграмы, якія паўтараюцца, JIT-кампілятар перапрацоўвае ў апаратныя інструкцыі, спэцыфічныя для дадзенай апэрацыйнай сыстэмы й працэсара. JIT-кампіляцыя значна паскарае працэс інтэпрытацыі, бо скампіляваны код будзе выконвацца так жа хутка, як і код, спэцыфічны для канкрэтнай сыстэмы выкананьня.

Java Virtual Machine дазваляе пісаць праграмныя прадукты, якія не залежаць ад плятформы, але сама JVM кросплятформенай не зьяўляецца, і кожны асяродак выкананьня мае сваю асабістую віртуальную машыну.

У 1996 годзе кампанія Sun выпусьціла першую вэрсію спэцыфікацыі Java-машыны, вядомую пад назвай «Блакітная кніга». Гэтая спэцыфікацыя дэ-факта сталася стандартам плятформы Java й дазволіла стварыць мноства альтэрнатыўных рэалізацыяў JVM. Зыходны код на мове C адной зь мінімальных рэалізацыяў віртуальнае машыны Java (Kilo Virtual Machine) прадстаўлены на афіцыйным сайце кампаніі Sun (такая Java-машына звычайна выкарыстоўваецца ў мабільных прыладах у складзе плятформы Java ME).

### API плятформы Java
Большасьць сучасных апэрацыйных сыстэмаў палягчаюць працу праграмістаў шляхам прапановы дынамічна зьвязуемых бібліятэкаў, у якіх ужо рэалізованы найбольш запатрабаваны функцыянал. Бібліятэкі й сыгнатуры іхніх мэтадаў складаюць дастасоўны праграмны інтэрфэйс (API). Цалкам зразумела, што API розных апэрацыйных сыстэмаў будуць адрозьнівацца адзін ад аднаго й іх прамое выкарыстаньне прывяло б да залежнасьці Java ад той ці іншай плятформы.

З гэтай прычыны асяродзьдзе выкананьня Java (JRE) уключае ў сябе, разам зь віртуальнай машынай, яшчэ й свой асабісты API. Можна вылучыць тры асноўныя задачы, якія ён вырашае. Па-першае, гэта рэалізацыя каранёвых клясаў, ад якіх насьледуюцца ўсе астатнія (Object, Class, Enum, Exception, Thread…), а таксама рэалізацыя трывіяльных праблемаў праграмаваньня, такіх як вылічэньне матэматычных функцыяў, праца з «доўгімі» лічбамі, сартыроўка масіваў ды іншае. Па-другое, API Java высока абстрагуе задачы, вельмі спэцыфічныя для кожнай плятформы. Напрыклад, сыстэмы ўвода-вывада, праца зь сеткай і сеткавымі пратаколамі, выкарыстаньне далучаных прыладаў. І, па-трэцяе, калі ніжэйляжачая плятформа не падтрымлівае тэхналёгію, якую прадугледжвае Java, наўпрост, то сыстэма павінная працягваць карэктную працу, вынік якое павінен як мага менш адрозьнівацца ад сыстэмы да сыстэмы.

Кампаніяй Sun рэалізаваныя тры асноўныя Java-плятформы, якія, з пункту гледжаньня праграмаваньня, будуць адрозьнівацца сваім API. Базавай для трох плятформаў зьяўляецца Java SE (стандартнае выданьне), на яе падставе пабудаваныя Java EE (карпрацыйнае выданьне) і Java ME (мікравыданьне). Таксама ёсьць і іншыя значныя плятформы ці тэхналёгіі (Java Card, JavaFX, JavaDB ды інш.), API якіх накіраванае на вырашэньне спэцыфічных праблемаў сваёй галіны выкарыстаньня.

Плятформа Java дазваляе выкарыстоўваць староньнія бібліятэкі ня толькі ў сваёй функцыянальнай частцы, але й у рэалізацыі асяродка выкананьня. Усё, што праграмнаму забесьпячэньню для гэтага патрэбнае — прайсьці сэрыю тэстаў кампаніі Sun на сумяшчальнасьць з плятформай.

### Мовы праграмаваньня
Першапачаткова на плятформе Java працавала толькі адна мова праграмаваньня, створаная для яе й названая ў яе гонар, але для віртуальнай машыны няма аніякае розьніцы, на якой мове была першапачаткова напісаная праграма — галоўнае, каб яна была скампіляваная ў карэктны байт-код. Таму нарастаючая папулярнасьць плятформы прывяла да стварэньня Java-кампілятараў для ўжо існуючых моваў праграмаваньня, узьнікненьня крыху зьмененых моваў праграмаваньня для лепшага ўжываньня магчымасьцяў плятформы, а таксама да стварэньня новых моваў, якія знаходзяць сваё выкарыстаньне ў розных сфэрах праграмаваньня.

### Java і .NET Framework
Плятформа .NET Framework лічыцца адказам карпарацыі Microsoft на ўзрослую на канец 90-х папулярнасьць Java. Калі існаваньне прамежкавага байт-коду ў Java было першапачаткова накіраванае на падтрымку кросплятформенае канцэпцыі, дык .NET Framework выкарыстоўвае CLI (агульная прамежкавая мова) для падтрымкі адной плятформай адразу некалькіх моваў праграмаваньня (кляса мовы C#, насьледаваная ад клясы Visual Basic .NET, к прыкладу, павінна была стацца нармальнай практыкай). CLI — мова праграмаваньня, зразумелая чалавеку, яе можна разглядаць як мову асэмблер для віртуальнай машыны .NET. Гэта палягчае задачу дэкампіляцыі, што можа быць выкарастанае як у карысных мэтах, так і для раскрыцьця камэрцыйнае таямніцы.

Плятформа .NET, распрацоўкай якое займаецца Microsoft, не зьяўляецца кросплятформенай або значна звужае функцыянал пры пераходзе на іншыя апэрацыйныя сыстэмы. Аднак існуе праект Mono, які займаецца распрацоўкай ліцэнзаванай Microsoft кросплятформенай вэрсіяй .NET Framework, а таксама не ліцэнзаванымі кросплятформенымі вэрсіямі WinForms, ADO.NET и ASP.NET.

Visual J#, створаная для пераходу Java-праграмістаў на плятформу .NET, не была сумяшчальнай са спэцыфікацыяй Java і, з прычыны нізкае папулярнасьці, цалкам перастане падтрымлівацца плятформай у 2015 годзе.

### Java Development Kit
JDK — камплект распрацоўшчыка Java, створаны карпарацыяй Sun для патрэбаў праграмістаў. У ягоны склад уваходзіць кампілятар (javac), стандартны набор бібліятэкаў плятформы, выканаўчае асяродзьдзе Java (JRE), а таксама дакумэнтацыю, прыклады й больш за дваццаць утылітаў, такіх як загрузьнік праграм, адладчык, прагляднік аплетаў ды інш. Усе сучасныя інтэграваныя асяродзьдзі распрацоўкі выкарыстоўваюць JDK дзеля сваёй працы, таму патрабуюць, каб JDK быў перадусталёваны, або пастаўляюцца разам зь ім.

Большая частка кода JDK выйшла 8 траўня 2007 году пад адкрытым ліцэнзійным пагадненьнем GNU.

### Гісторыя вэрсіяў
Гэта, натуральна, ня поўны сьпіс тэхналёгіяў, якія былі дадзеныя ў кожнай з вэрсіяў Java:

JDK 1.0
23 студзеня 1996 году
Першая вэрсія Java, стабільная вэрсія 1.0.2 атрымала назву Java 1.

JDK 1.1
19 лютага 1997 году
Перагледжаная мадэль апрацоўкі падзеяў у AWT. Даданая магчымасьць стварэньня ўключаных клясаў. Рэалізаваныя тэхналёгіі JDBC i RMI (падключэньне да базаў зьвестак і выдалены выклік мэтадаў адпаведна).

J2SE 1.2
8 сьнежня 1998 году
Пачынаючы з гэтай вэрсіі, Java выходзіць пакетамі J2SE, J2EE, J2ME, дзе «2» сымбалізуе другое пакаленьне плятформы.
Выкарыстоўваньне strictfp-клясаў і мэтадаў дазволіла зрабіць рэзультаты апэрацыяў з плаваючай коскай незалежнымі ад абранага працэсара. У JVM убудованы кампілятар часу выкананьня. Дададзеныя бібліятэкі для працы са стандартнымі калекцыямі дадзеных. Грунтоўна перагледжаная кляса Thread (мэтады suspend(), stop() і resume(), да прыкладу, з тых часоў лічацца састарэлымі.)

J2SE 1.3
8 траўня 2000 году
З гэтага часу выкарыстоўваецца віртуальная машына HotSpot, якая кампілюе толькі кавалкі коду, якія будуць выкарыстоўвацца часьцей за іншыя (Hot Spot — гарачыя месцы, у перакладзе).

J2SE 1.4
6 лютага 2002 году
Новая канцэпцыя ланцуговых выключэньняў дазволіла захоўваць сыстэмную інфармацыю часу ўзьнікненьня выключнае сытуацыі падчас перадачы выключэньня па герархіі выклікаў. Дададзеныя сынтаксічны аналізатар XML і падтрымка IPv6.

J2SE 5
30 верасьня 2004 году
Даданыя пералічэньні, цыкл for у стыле foreach, пераменныя зьменнае колькасьці. Рэалізаваная аўтаабгортка скалярных тыпаў дадзеных і ўведзеныя родавыя функцыі й клясы.

Java SE 6
11 сьнежня 2006 году
Асноўныя намаганьні накіраваныя на павелічэньне хуткадзейнасьці празь зьмены ў рэалізацыі каранёвых бібліятэкаў, кампілятара й зборцы сьмецьця.

Java SE 7
28 ліпеня 2011 году
Падтрымка дынамічных моваў вядзецца праз так званую шматмоўную віртуальную машыну («машына Да Вінчы» ад Sun). Даданыя такія сынтаксічныя паляпшэньні як аўтавызначэньне тыпу пры стварэньні аб’ектаў родавых клясаў, кіраваньне рэсурсамі ў try-блёках і выкарыстоўваньне шэрагавых тыпаў у switch-блёках.

Java SE 8
18 сакавіка 2014 году.

## Выкарыстаньне

### Выкарыстаньне на пэрсанальных кампутарах
Паводле Sun, JRE выкарыстоўваецца зараз болей як на 700 мільёнах пэрсанальных кампутараў. Найбольшую папулярнасьць набылі такія праграмныя прадукты абапіраючыяся на Java, як інтэграваныя асяродзьдзі праграмаваньня NetBeans ды Eclipse, файлаабменныя праграмы LimeWire, Vuze. MATLAB і дастасунак для сумеснай працы Lotus Notes таксама выкарыстоўваюць Java.

Microsoft не пастаўляе JRE у камплекце зь Windows з таго часу, як кампанія Sun падала на Microsoft судовыя пазовы. Судовыя пазовы былі зьвязаныя з тым, што Microsoft дадавала ў сваё асяродзьдзе выкананьня Java-клясы, якія працавалі выключна на Windows. Асяродзьдзе выкананьня Java пастаўляецца з Mac OS X (пазначаецца як састарэлае пачынаючы з вэрсіі 10.6.3 сакавіка 2010 году, таму можа быць ня ўключанае ў будучыя вэрсіі), шмат якія дыстрыбуты Linux уключаюць у сябе вольныя рэалізацыі Java: GNU Classpath, IcedTea.

### Мабільныя прылады
Плятформа Java ME набыла вялікую папулярнасьць у галіне выкарыстаньня на мабільных прыладах, дзе яна пасьпяхова канкуруе з Symbian, BREW і .NET Compact Framework.

Шырокая разнастайнасьць вытворцаў мабільных тэлефонаў прывяла да патрэбы распрацоўкі адзіных стандартаў, гэтым стандартам у 2000 годзе стаўся MIDP — профіль мабільнае прылады з інфармацыйнымі функцыямі. Стандарт, распрацаваны ў межах Java Community Process, вызначаў панятак «мідлет» — кампактная праграма на мове Java.

MIDP1 вызначаў прыладу зь невяліким дысплэем, бяз доступу да аўдыё й абмежаваньнем на памеры праграмы ў 32 KB. MIDP2 ужо дазваляў выкарыстоўваць аўдыё ды павялічыў максымальны памер праграмы да 64kB. Некаторыя вытворцы, дзякуючы пашыраным магчымасьцям сваёх мабільных прыладаў, паслабляюць гэтыя абмежаваньні, напрыклад, каб дазволіць запуск мідлетаў большых памераў.

Апэрацыйная сыстэма Android выкарыстоўвае толькі мову праграмаваньня Java; бібліятэкі й віртуальная машына для падтрымкі мовы асабістыя й ня маюць непасрэднага дачыненьня да плятформы Java.

### Карпарацыйнае й сэрвэрнае выкарыстаньне
Java стала асновай IT-распрацоўкі ў галіне карпарацыйнага выкарыстаньня, гэта было дасягнута двума шляхамі:
# Магчымасьць Java пасьпяхова парцаваць на вэб-сэрвэрах дазволіла ёй стаць вядучай плятформай для сувязі Інтэрнэту з інфармацыйнымі сыстэмамі прадпрыемстваў. Выкарыстоўваючы тэхналёгіі Java, камэрцыйныя арганізацыі здолелі перанесьці частку сваіх паслугаў у доступ праз Інтэрнэт (банкавыя паслугі ў сыстэме рэальнага часу, заказ квіткоў праз Інтэрнэт)
# Java стала стандартам у распрацоўцы праграмнага забесьпячэньня, якое выкарыстоўваецца вялікімі прадпрыемствамі. Да гэтай катэгорыі адносяцца вэб-сэрверы, сэрвэры праграмных дастасункаў, базы зьвестак, сыстэмы кіраваньня бізнэс-працэсамі й сыстэмы кіраваньня зьместам вэб-бачыны.

## Крытыка

### Generic-клясы
Generic або родавыя клясы й функцыі былі ўведзеныя ў мову Java ў вэрсіі J2SE 5.0, але гэта было дадаткам да мовы праграмаваньня, у той час як у плятформе не было зроблена зьменаў для падтрымкі дадзенае магчымасьці. Кампанія Sun абгрунтавала гэта тым, што так будзе дасягнута зваротная сумяшчальнасьць зь бібліятэкамі й праграмнымі прадуктамі, напісанымі раней. Але такой падыход запатрабаваў ад распрацоўшчыкаў выкарыстаць мэтад, пры якім інфармацыя пра тып аб’екта родавае клясы губляецца пад час выкананьня, пакідаючы толькі інфармацыю пра інтэрфэйс. Гэта не дазваляе джава-распрацоўшчыкам выкарыстоўваць зручныя падыходы, даступныя на плятформах-канкурэнтах. Напрыклад, апэрацыі ніжэй немагчымыя ў мове праграмаваньня Java:

 public class MyClass {
     public static void myMethod(Object item) {
         if (item instanceof E) {  //Памылка на этапе кампіляцыі
             …
         }
         E item2 = new E();   //Памылка на этапе кампіляцыі
         E[] iArray = new E[10]; //Памылка на этапе кампіляцыі
     }
 }

## Крыніцы

## Вонкавыя спасылкі

Катэгорыя:Праграмнае забесьпячэньне
Катэгорыя:Плятформы праграмаваньня
Катэгорыя:Java