Java
Java (вымаўляецца: Джа́ва) — аб'ектна-арыентаваная мова праграмаваньня, распрацаваная карпарацыяй Sun Microsystems у пачатку 1990-х гадоў. Праґрамы, напісаныя на Java, звычайна кампілююцца ў байткод, але кампіляцыя ў родны машынны код таксама магчыма. У час выкананьня выкарыстоўваецца Java інтэрпрэтатар альбо JIT кампіляцыя ў машынны код.
Мова значна запазычала сынтакс з C і C++, але мае больш простую аб'ектную мадэль і менш нізкаўзроўневых магчымасьцяў. Мова скрыптоў JavaScript мае падобную назву й сынтакс, але ня мае дачыненьня да Java.
Гісторыя
Мова Java была распрацавана Джэймсам Ґослінґам у чэрвені 1991 года для ўжываньня ў адным з яго многіх праектаў па распрацоўцы тэлевізійных прыставак. Першапачатковая назва мовы была Oak, магчыма таму, што побач з офісам Ґослінґа рос дуб. Некаторы час мова мела назву Green, але пасьля была прынята канчатковая назва Java, абраная са сьпісу выпадковых слоў. Мэтай Ґослінґа было стварэньне рэалізацыі віртуальнай машыны й мовы, якая б мела звыклы C/C++ стыль запісу натацый. У 1995 годзе зьявілася на сьвет першая агульнадаступная рэалізацыя Java, якая мела вэрсію 1.0. Выхад гэтай вэрсіі абвяшчаў "Write Once, Run Anyware" (Напісаўшы аднойчы, запускай паўсюль) і прадугледжваў бязплатнае працоўнае асяродзьдзе для папулярных плятформ. Яна была дастаткова бясьпечная, мела наладкі бясьпекі, уключаючы магчымасьць абмяжоўваньня доступу да сеціва й файлаў. Скора асноўныя браўзэры зрабілі падтрымку запуску бясьпечных Java аплетаў унутры вэб старонак. Java хутка стала папулярнай. З праходам Java 2, новыя вэрсіі мелі розную канфігурацыю для розных тыпаў плятформ. Для прыкладу, J2EE была створана для распрацоўкі праграм буйнога бізнэсу, а вельмі абрэзаная вэрсія J2ME, для мабільных плятформ. J2SE было абазначэньнем стандартнай вэрсіі. У 2006 годзе ў маркетынгавых мэтах новыя J2 вэрсіі былі перайменаваны ў Java EE, Java ME і Java SE адпаведна.
У 1997 годзе Sun Microsystems зьвярнулася да органу стандартызацыі ISO/IEC JTC1 і пазьней да Ecma International каб стандартызаваць Java, але скора дакумэнт быў адкліканы. Java застаецца стандартам de facto i кантралюецца з дапамогай Java Community Process. У свой час, Sun зрабіла ўсе часткі рэалізацыі Java даступнымі без прад'яўленьня прэтэнзій да карыстальнікаў, хоць яны й былі ўласьніцкім праграмным забесьпячэньнем. Sun атрымоўвала даход ад Java за кошт продажу ліцэнзій для спэцыяльных прадуктаў, такіх як Java Enterprise System. Sun адрозьнівае свае Software Development Kit (SDK) і Runtime Environment (JRE), якая зьяўляецца часткай SDK і ў яе склад не ўваходзяць прылады для распрацоўкі праграм на Java.
13 лістапада 2006 года кампанія Sun зрабіла большую частку Java свабодным праграмным забесьпячэньнем, выпусьціўшы яе пад ліцэнзіяй GNU General Public License (GPL). 8 травеня 2007 года Sun скончыла працэс адкрыцьця ўсяго галоўнага кода Java. Засталася закрытай не вялікая частка кода, на якую Sun ня мела аўтарскіх правоў. Але з дапамогай праекту IcedTea, які вяла з дазволу Sun кампанія Red Hat, у чэрвені 2008 года 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 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 замяніць гэтыя часткі коду альтэрнатыўным увасабленьнем і зрабіць бібліятэку клясаў цалкам адкрытай.
Вонкавыя спасылкі
- Афіцыйная хатняя старонка для распрацоўшчыкаў
- Афіцыйная хатняя старонка для карыстальнікаў
- Беларуская Java User Group - кам'юнiцi беларускiх Java-дэвэлапэраў
- Belarus Java Developers Network
- Набор анлайн-падручнікаў (анг.)
|