-{Java}- () је објектно-оријентисани програмски језик, који су почетком 1990-их развили Џејмс Гозлинг и -{Sun Microsystems}- (данас -{Oracle Corporation}-).

Многи концепти Јаве су засновани на језику Оберон, Никлауса Вирта, творца Паскала, Модуле и других језика, и Ханспетера Месенбека. Избацили су концепт модула и увели пакете какве данас знамо, који се ослањају на фајл систем и увели формално концепт класа из објектно-оријентисане парадигме. Осим тога, језик има синтаксу сличну језицима -{C}- и -{C++}-, али је много строжи при превођењу, дизајниран тако да буде независан од платформе, и са поједностављеним управљањем меморијом. Претпоставља се да је ово урађено због популарности језика -{C}-, али и због једноставности неких структура. Прва верзија је званично објављена 1995. године.

Јава је, уз Котлин, званично подржан језик за израду мобилних апликација за Андроид уређаје.

Карактеристике Јаве Програмски језик Јава треба да буде: једноставан - да буде систем у коме би се лако програмирало, без потребе за компликованим уходавањем и који користи постојећи начин размишљања. Синтакса језика Јава је унапређена верзија синтаксе -{C++}- објектно оријентисан - објектно оријентисано пројектовање представља технику програмирања фокусирану на податке(објекте) и на интерфејсе ка тим објектима дистрибуиран - Јава поседује исцрпну библиотеку рутина за рад са ТCP/IP протоколима, као што су HTTP и FTP. Јава апликације могу да приступају објектима преко мреже и преко URL-а, са подједнаком лакоћом као да приступају локалном систему датотека робустан - Јава је намењена за писање програма који морају бити поуздани на много начина. Истиче се у раној провери могућих проблема, каснијој динамичкој провери(током извршавања) и елиминацији ситуација у којима лако долази до појаве грешака безбедан - Јава је намењена коришћењу у мрежним/дистрибуираним окружењима. Према томе, много је труда уложено у безбедност. Омогућава конструкцију система који су заштићени од вируса и злонамерне модификације. Од самог почетка, Јава је пројектована да потпуно онемогући одређене врсте напада, као што су прекорачење извршног стека, приступ меморији изван дела додељеног процесу, читање или уписивање датотека без дозволе... неутралан - компајлер ствара објектну датотеку, чији је формат независан од оперативног система на коме се покреће. Компајлирани код се може извршавати на многим процесорима, под претпоставком присуства извршног система Јава. Јава компајлер остварује ово тако што генерише бајткод инструкције, које немају никакве везе са архитектуром коришћеног рачунара, већ се подједнако лако интерпретирају на свакој машини, а исто тако лако се преводе и у одговарајући машински код преносив - овде не постоје аспекти који су зависни од имплементације. Величине примитивних типова су фиксне, као и њихово понашање у аритметици. Такође, библиотеке које су део система дефинишу интерфејсе који су преносиви интерпретиран - исти Јава бајткод се може извршавати на сваком компјутеру за који постоји Јава интерпретер. Будући да је линковање постепен и лакши поступак, сам развој може бити бржи перформантан - мада су перформансе преведеног бајткода обично више него довољне, постоје ситуације када су потребне боље перформансе. Бајткод може да буде преведен током извршавања у машински језик вишенитан - предности вишенитне обраде су бољи интерактивни одзиви и понашање у реалном времену динамичан - Јава је пројектована тако да се прилагођава окружењу које се стално унапређује. Библиотеке могу слободно да додају нове методе и поља, без утицаја на клијенте. У Јави је прилично једноставно проналажење информација приликом извршавања програма.

Историја Јаве

James Gosling и Patrick Naughton, група инжињера компаније Sun, су иницирали језички пројекат Јава у јуну 1991. Језик је назван Храст (), и био је намењен за програмирање кућних електронских уређаја (телевизора, видео рекордера и сл.). Име пројекта Храст је касније промењено у Јава, по бренду Јава кафе (), која је добила име по истоименом острву Јава, тако да лого језика Јава приказује чашу вруће кафе. Постоји још једна верзија порекла имена језика, која се односи на алузију на апарат за кафу као пример кућног уређаја, за који је програмски језик првобитно креиран. Гослинг је Јава дизајнирао са истом синтаксом као у C/C++ како би системски и апликативни програмери лакше научили језик.

Sun Microsystems је прву јавну имплементацију објавио као Јава 1.0 1996. године. Обећавао је Write Once, Run Anywhere (WORA), обезбеђујући извршавање кода на популарним платформама без утрошка времена. Прилично безбедан и са сигурносним подешавањима, дозвољавао је ограничења приступа мрежи и датотекама. Главни веб прегледачи убрзо су уградили могућност покретања Јава аплета на веб страницама и Јава је брзо постала популарна. Артур ван Хоф је поново написао преводилац за Јава 1.0 у Јави како би се строго придржавао спецификације језика Јава 1.0. Са појавом Јава 2 (првобитно објављен као Ј2SЕ 1.2 у децембру 1998. - 1999), нове верзије су имале вишеструке конфигурације изграђене за различите типове платформи. Ј2ЕЕ је укључивао технологије и API за пословне апликације које се обично извршавају у сервер окружењу, док Ј2МЕ садржи API оптимизован за мобилне апликације. Десктоп верзија је преименована у Ј2SЕ. 2006. године, у маркетиншке сврхе, Sun је преименовао нове верзије Ј2 у Јаvа ЕЕ, Јаvа МЕ и Јаvа SЕ.

Године 1997. Sun Microsystems обратио се ISO/IEC JTC 1 уреду за стандардизацију, а касније Ecma International како би формализовао Јаву, али се убрзо повукао из процеса. Јава остаје de facto стандард, који се контролише кроз процесе Јава заједнице. У једном тренутку, Sun је већину својих Јава имплементација учинио доступним без наплате, упркос лиценцираном статусу софтвера. Sun је стварао приход од Јаве продајом лиценци за специјализоване производе као што је Java Enterprise System.

Дана 13. новембра 2006, Sun је издавао већи део своје Јава виртуелне машине (JVM) као бесплатни и open-source софтвер (FOSS), под условима наведеним у GNU General Public Licence (GPL). 8. маја 2007., Sun је завршио поступак, стављајући сав свој JVM основни код доступан као free software/open source дистрибуцију, осим малог дела кода на који Sun није имао ауторска права.

Sun-ов потпредседник Рич Грин рекао је да је у погледу Јаве Sun имао идеалну улогу еванђелисте. Након што је компанија Oracle Corporation преузела Sun Microsystems у 2009–10, Oracle се описао као управитељ Јава технологије са великом посвећеношћу подстицању учешћа и транспарентности заједнице. То није спречило Oracle да поднесе тужбу против Google-а убрзо након тога због употребе Јаве унутар Android SDK-а (погледајте одељак о Android-у). Јава софтвер се извршава на свему, од лаптопа до центара података, играчких конзола до научних супер рачунара. 2. априла 2010. James Gosling поднео је оставку у компанији Oracle.

У јануару 2016. Oracle је објавио да ће за Јава run-time окружења произведена из JDK 9 прекинути додатак прегледача.

Принципи

У стварању Јава језика ослањало се на пет основних циљева:

Мора бити једноставан, објектно оријентисан и препознатљив. Мора бити темељан и сигуран. Мора бити архитектички неутралан и преносив. Мора да се извршава са високим перформансама. Мора бити интерпретиран, праћен и динамичан.

Верзије

Од марта 2019. подржана је Јава 8; Јава 8 и 11 као верзије за дугорочну подршку (LTS). Главне издања Јава верзија, заједно са датумима њиховог објављивања:

1991. Претеча Јаве намењена мрежном кућном окружењу 1994. Усмерење према Интернету 1995. Језик Јава лансиран на SunWorld конференцији 1996. Sun развија JDK 1.0 (кодно име Oak) 1997. Појављује се JDK 1.1 1998. Крајем године појављује се нови JDK означен са J2SE 1.2 2000. Појављује се J2SE 1.3 2002. Појављује се J2SE 1.4 2004. Појављује се J2SE 5.0 – интерна ознака J2SE 1.5 2006. Sun објављује Java SE 6 2010. Java постаје власништво компаније Oracle 2011. Појављује се Java SE 7 2014. Појављује се Java SE 8 2017. Појављује се Java SE 9 2018. Појављује се Java SE 10 2018. Појављује се Java SE 11 2019. Појављује се Java SE 12 2019. Појављује се Java SE 13

Извршавање Јава кода Јава платформа, тј. Јава окружење у ком се програм извршава, дизајнирана је тако да што мање зависи од специфичних карактеристика конкретног рачунарског система.

Јава се извршава коришћењем Јава виртуелне машине -ЈVМ ()"Јава Виртуелна Машина" - језгро Јаве, апстрактна машина која постоји само у меморији.

Јава је језик који се преводи и интерпретира. Јава изворни код (*.java фајл) након компајлирања, компајлером javac, се преводи у изворни код бајткод (*.class фајл). Формирани бајткод је исти за све архитектуре рачунара и представља инструкције за Јава виртуелну машину. Бајткод у Јава виртуелној машини, јава интерпретатором - јаva, се дешифрује и интерпретира у извршни код, погодан за извршавање на рачунару, одговарајућем хардверу.

У зависности од ЈVМ, за исти изворни код можемо добити различите извршне кодове, за различите платформе.

Јава изворни код и бајткод остају исти без обзира на којој се платформи извршава програм -“Write once, run everywhere”."Извршавање Јаве"

Јавина преносивост, међутим, изазива губитак перформанси.

То је зато што се тек приликом интерпретирања бајткод преводи у машински за конкретну платформу. Ово може бити проблем ако се исти код више пута интерпретирана истој платформи.

Губитак перформанси је смањен коришћењем Just-in-time () или JIT компајлера. JIT компајлер преводи Јава методе у машински код за конкретну платформу на којој се користи.

Уништавање објеката Уклањање непотребних објеката из меморије обавља -{garbage collector}-. Овај процес ради независно од покренутих програма и самостално одлучује које објекте ће уклонити из меморије. Осим уклањања сувишних објеката он врши дефрагментацију меморије. Његовим кориштењем се програмер ослобађа посла који се односи на ослобађање меморије кроз програмски код. На овај начин се не мора водити рачуна о деструкторима већ се њихов посао изводи аутоматски. -{Garbage collector}- је могуће покренути и ручно.

Синтакса Пример кода // Ако се класа зове Pozdrav, име фајла мора бити Pozdrav.java

public class Pozdrav { // Главној методи се предаје низ параметара унетих са командне линије

public static void main(String[] args) { System.out.println("Здраво свете!");

Идентификатори Идентификатор служи за идентификовање неке конструкције у Јави(нпр. променљивих, класа, метода, итд). Идентификатор мора почети словом, знаком за долар или цртом за подвлачење, док у преосталом делу идентификатора могу да се појаве и цифре. Пошто у Јави постоји разлика између великих и малих слова, 'Sunce' и 'sunce' су два различита идентификатора.

Резервисане речи Резервисане речи су идентификатори који имају специјалну намену у језику Јава и не могу се користити за именовање других ентитета(променљивих, класа, метода).

Резервисане речи јаве су: -{abstract}-, -{boolean}-, -{break}-, -{byte}-, -{case}-, -{catch}-, -{char}-, -{class}-, -{const}-, -{continue}-, -{default}-, -{do}-, -{double}-, -{else}-, -{extends}-, -{final}-, -{finally}-, -{float}-, -{for}-, -{goto}-, -{if}-, -{implements}-, -{import}-, -{instanceof}-, -{int}-, -{interface}-, -{long}-, -{native}-, -{new}-, -{package}-, -{private}-, -{protected}-, -{public}-, -{return}-, -{short}-, -{static}-, -{strictfp}-, -{super}-, -{switch}-, -{synchronized}-, -{this}-, -{throw}-, -{throws}-, -{transient}-, -{try}-, -{void}-, -{volatile}- и -{while}-.

Осим ових, резервисане су и вредности: -{true}-, -{false}- и -{null}-.

Литерали Литерали у Јави су константе примитивног типа или конкретан примерак класе -{String}-. Целобројни литерали у Јави могу бити записани као: декадни, октални или хексадекадни (а од верзије 7 и као бинарни).