Java
Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі.
Java (вымаўляецца: Джа́ва) — аб'ектна-арыентаваная мова праграмаваньня, распрацаваная карпарацыяй Sun Microsystems у пачатку 1990-х гадоў. Праґрамы, напісаныя на Java, звычайна кампілююцца ў байткод, але кампіляцыя ў родны машынны код таксама магчыма. У час выкананьня выкарыстоўваецца Java інтэрпрэтатар альбо JIT кампіляцыя ў машынны код.
Мова значна запазычала сынтакс з C і C++, але мае больш простую аб'ектную мадэль і менш нізкаўзроўневых магчымасьцяў. Мова скрыптоў JavaScript мае падобную назву й сынтакс, але ня мае дачыненьня да Java.
Зьмест |
[рэдагаваць] Гісторыя выпускаў
- JDK 1.1.4 (Sparkler) 12 верасьня, 1997
- JDK 1.1.5 (Pumpkin) 3 сьнежня, 1997
- JDK 1.1.6 (Abigail) 24 красавіка, 1998
- JDK 1.1.7 (Brutus) 28 верасьня, 1998
- JDK 1.1.8 (Chelsea) 8 красавіка, 1999
- J2SE 1.2 (Playground) 4 сьнежня, 1998
- J2SE 1.2.1 (none) 30 сакавіка, 1999
- J2SE 1.2.2 (Cricket) 8 ліпеня, 1999
- J2SE 1.3 (Kestrel) 8 траўня, 2000
- J2SE 1.4.0 (Merlin) 13 лютага, 2002
- J2SE 1.4.1 (Hopper) 16 верасьня, 2002
- J2SE 1.4.2 (Mantis) 26 жніўня, 2003
- J2SE 5.0 (1.5.0) (Tiger) 29 верасьня, 2004
- Java SE 6 (1.6.0) (Mustang) 11 сьнежня, 2006 [1]
- Java SE 7 (1.7.0) (Dolphin) чакаецца ў 2008
[рэдагаваць] Філязофія
[рэдагаваць] Галоўныя мэты
Галоўныя мэты, якія ставіліся пры распрацоўцы Java:
- Яна павінна быць аб'ектна-арыентаванай мовай праграмаваньня.
- Яна павінна дазваляць выкананьне адной і той жа праграмы на мностве апэрацыйных сыстэм.
- Яна павінна ўключаць у сябе ўбудаваную падтрымку кампутарных сетак.
- Яна павінна быць распрацаванай для бясьпечнага выкананьня аддалёнага коду.
- Яна павінна быць простай у выкарыстаньні й зьбіраць у сябе лепшыя часткі іншых аб'ектна-арыентаваных моваў праграмаваньня.
Дзеля дасягненьня падтрымкі сеціва й выкананьня аддалёнага коду, Java-праграмісты часам карыстуюцца пашырэньнямі накшталт CORBA, Internet Communication Engine альбо OSGi.
[рэдагаваць] Асаблівасьці
[рэдагаваць] Незалежнасьць ад архітэктуры
Незалежнасьць ад архітэктуры азначае, што праґрама напісаная на мове Java мусіць працаваць заўсёды аднолькава на любой з падтрымліваемых плятформаў. Аднойчы напісаная праґрама й аднойчы скампіляваная, працуе ўсюды. Для дасягненьня гэтага большая частка Java кампілятараў пераўтварае код мовы Java ў Java байткод — спрошчаныя машынныя інструкцыі, спэцыфічныя для Java плятформы.
[рэдагаваць] Аўтаматычнае прыбіраньне сьмецьця
Адной з галоўных ідэяў Java была аўтаматычная мадэль кіраваньня памяцьцю. Java-праграміст пазбаўлены неабходнасьці самастойнага кіраваньня памяцьцю. У некаторых іншых мовах праграмаваньня праграміст вымушаны самастойна прызначаць памяць для стварэньня аб'ектаў й разьмяшчэньня іх ў кучы (heap). Пасьля гэтага ён адказны за самастойнае вызваленьне захопленай памяці, калі ў ёй зьнікала неабходнасьць. Калі праграміст забываўся на вызваленьне памяці пасьля таго, як аб'екты зьмешчаныя ў ёй станавіліся непатрэбнымі, адбывалася тое, што называецца працёкам памяці (memory leak). У выніку праграма магла ўжываваць неабмежаваную колькасьць дасягнай памяці. У дадатак да гэтага, калі праграміст спрабаваў вызваліць адну й тую ж вобласьць памяці некалькі разоў, праграма магла стаць нестабільнай і гэта магло выклікаць яе парушэньне.
У Java гэтыя патэнцыйныя праблемы пазьбягаюцца сыстэмай аўтаматычнага прыбіраньня сьмецьця. Праграміст проста стварае аб'екты й карыстаецца імі пры неабходнасьці, а асяродзьдзе Java адказывае за кіраваньне створанымі праграмістам аб'ектамі на працягу ўсяго цыклу жыцьця праграмы. Праграма ці аб'екты працуюць з іншымі аб'ектамі праз спасылкі (якія, з нізкаўзроўневавага пункту гледжаньня зьяўляюцца адрасамі на іх у кучы). Калі спасылак на аб'ект не застаецца, прыбіральнік сьмецьця ў Java аўтаматычна выдаляе гэтыя аб'екты, вызваляе памяць і прадухіляе працёкі памяці. Працёкі памяці ўсё яшчэ могуць адбывацца, калі код праграмы ўтрымлівае спасылкі на аб'екты, якія болей не патрэбныя, але гэтыя працёкі адбываюцца на больш высокім канцэптуальным узроўні.
[рэдагаваць] API
Клясы ў API Java арганізаваны ў асобныя групы, якія маюць назву пакетаў (packages). Кожны пакет утрымлівае набор злучаных інтэрфэйсаў, клясаў ды выключэньняў. Дасягнасьць розных пакетаў API залежыць ад выбранай плятформы:
- Java Platform, Micro Edition (Java ME) — накіравана на абсталяваньне з абмежаванай вылічальнай магутнасьцю (мабільныя тэлефоны, кішэнныя кампутары і г. д.).
- Java Platform, Standard Edition (Java SE) — накіравана на настольныя сыстэмы, стварэньне дастасаваньня для канечнага карыстальніка.
- Java Platform, Enterprise Edition (Java EE) — накіравана на стварэньне дастасаваньня ўзроўня прадпрыемства.
Гэтыя наборы API кантралююцца Sun Microsystems ў супольнасці з іншымі зацікаўленымі суб'ектамі праз праграму Java Community Process. Удзельнікі гэтай праграмы, кампаніі ці індывідуальныя распрацоўшчыкі, могуць удзельнічаць у працэсе распрацоўкі Java API. Аднак гэта стала прадметам разнагалосьсяў.
[рэдагаваць] Сынтакс
У адрозьненьне ад мовы C++, якая мае ў сябе сродкі і сынтакс для структурнага, абагульняльнага й аб'ектна-арыентаванага праграмаваньня, Java была створана выключна як аб'ектна-арыентаваная мова. Як вынік, амаль усё зьяўляецца аб'ектамі і ўвесь код пішацца ўнутры клясаў. Выключэньне складаюць унутраныя тыпы (натуральныя й рэчаісныя лікі, лягічны тып, літары), якія не зьяўляюцца клясамі для забесьпячэньня добрай прадукцыйнасьці.
Аднак трэба зазначыць, што ў Java версіі 5.0 з'явіўся працэс аўтапакаваньня (autoboxing) і распакаваньня (auto-unboxing).
- Аўтапакаваньне — гэта працэс аўтаматычнага пераўтварэньня даных простага тыпу ў адпаведныя яму аб'екты.
- Аўтараcпакаваньне — працэс аўтаматычнага выцягваньня значэньня з аб'екта, у які яно ўпакавана, пры неабходнасьці.
Прыклад:
Integer iOb = 100; // Java аўтаматычна пакуе значэньне тыпу int у аб'ект int i = iOb; // аб'ект iOb аўтаматычна распакоўваецца ў просты тып
[рэдагаваць] Прыклад праграмы
public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Перад выкарыстаньнем гэтай праграмы яе трэба скампіляваць. Захаваем крынічны код праграмы ў файл, Hello.java
(імя файла павінна супадаць зь імем клясы). І зараз скампілюем яе ў байт-код:
$ javac Hello.java
што ў выніку дасць нам файл Hello.class
. Гэты файл можна запусьціць на выкананьне:
$ java Hello Hello, World! $
[рэдагаваць] Ліцэнзія
13 лістапада 2006 году Sun абвесьціла аб тым, што ўвесь крынічны код Java будзе цалкам выпушчаны пад вольнай ліцэнзіяй GNU General Public License. 11 лістапада 2006 году пад ліцэнзіяй GPL былі выпушчаны кампілятар javac і hotspot Java VM (за выключэньнем бібліятэкі клясаў).
Выконваючы сваё абяцаньне, 8 траўня 2007 году Sun перавяла весь крынічны код бібліятэкі клясаў пад вольную ліцэнзію GPL. Выключэньнем стала абмежаваная частка коду, якую Sun ліцэнзавала ў іншых кампаній і якія не пажадалі пераліцэнзаваньня свайго коду пад вольнай адкрытай ліцэнзіяй. Зараз мэта кампаніі Sun замяніць гэтыя часткі коду альтэрнатыўным увасабленьнем і зрабіць бібліятэку клясаў цалкам адкрытай.