Podučavanje sestre Javi: prvi Java program — Hello World
„Sanmej, danas ćemo napisati prvi Java program — Hello World. Uzbuđena si?"
Sanmej je klimnula glavom u znak slaganja (😂).
„Dobro, krenimo odmah."
Otvori IntelliJ IDEA, napravi novi projekat za učenje Jave: klikni File → New → Project.

Izaberi verziju JDK-a, na primer JDK 8 koji smo ranije instalirali.

Možeš izabrati i JDK 11 ili najnoviji JDK 17, ili dodati novu verziju JDK-a, ali (ne preporučuje se).

Zatim klikni „next", sve dok ne uneseš ime projekta, na primer tobebetterjavaerdemo.

Zatim klikni finish, nakon čega ćeš videti interfejs novog projekta.

Ako se tema tvoje IntelliJ IDEA-e razlikuje od Ergeove, nije problem; naravno, ako si tip koji voli lepo, možeš instalirati dodatak Vuesion Theme — način instalacije naći ćeš ovde.
„OK, ovim smo pripremili okruženje za učenje Jave, pa možemo da napišemo prvi Hello World program", rekao sam s pouzdanjem Sanmej.
Izvorni kod obično stavljamo u direktorijum src (prefiks reči source — zato u programiranju moraš znati česte engleske reči; ako ne znaš, nauči).
Desni klik na direktorijum src, u meniju redom izaberi New → Java Class.

Unesi ime klase (šta je klasa, obradićemo kasnije), obrati pažnju da velika i mala slova utiču, zatim pritisni enter.

Dobićeš ovakav kod.

Komentare je Erge već konfigurisao; ako kod tebe nisu, to je u redu — public class HelloWorld {} je ono što je IntelliJ IDEA automatski generisala za nas.
Zatim unutar velikih zagrada otkucaj main, sačekaj da IntelliJ IDEA ponudi predlog, pa pritisni enter.
IntelliJ IDEA će automatski generisati main metod, odnosno ovaj kod.

Zatim u main metodu otkucaj so, sačekaj predlog, pa pritisni enter.

IntelliJ IDEA će automatski dodati System.out.println() — to je metod za ispis na konzolu (početnici, ne brinite šta znači, obradićemo kasnije).

Zatim u male zagrade println() unesi "Hello World", obrati pažnju da su to engleske dvostruke navodnike — kineske će izazvati grešku, Sanmej.

Zatim u editoru koda HelloWorld.java, odnosno na poziciji kursora, uradi desni klik i izaberi „Run 'HelloWorld.main()"'.

Nakon što IntelliJ IDEA kompilira i pokrene kod, na konzoli ćeš videti ovakav ispis.

To znači da je naš prvi Java kod gotov — čestitaj sebi, Sanmej!
„Erge, predivan si, tako sam uzbuđena!!!!!!!"
Hajde da ukratko objasnimo ovaj kod.
Prvi Java program je veoma jednostavan; hajde da promenimo sadržaj ispisa i zamenimo Hello World:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Sanmej, manje gledaj telefon, manje igraj igrice, uči marljivo, lepa si.");
}
}- Ključna reč
class: njome se u Javi deklariše klasa. - Ključna reč
public: modifikator pristupa koji označava vidljivost. - Ključna reč
static: njome možemo deklarisati bilo koji metod; metod modifikovan sastaticzove se statički metod. Statički metod se može pozvati bez pravljenja objekta. - Ključna reč
void: označava da metod ne vraća nikakvu vrednost. - Ključna reč
main: označava da je to glavni metod, odnosno ulazna tačka izvršavanja programa.main()metod izvršava Java virtuelna mašina; uz ključnu rečstaticmože se pozvati bez pravljenja objekta, što štedi prilično memorijskog prostora. String [] args: parametarmain()metoda, tipa String niz, imena args.System.out.println(): Java naredba koja u opštem slučaju ispisuje prosleđeni argument na konzolu. System je final klasa u paketu java.lang koja pruža standardni ulaz, standardni izlaz i tok za ispis grešaka itd.outje statičko polje član klase System, tipa PrintStream, koje je mapirano na standardni izlaz konzole domaćina.printlnje metod klase PrintStream, realizovan pozivom metodaprintuz dodavanje znaka za novi red.
„Ako ne možeš sve da zapamtiš, nije problem — obradićemo i kasnije (mesta na koja se može skočiti biće detaljno razrađena)." Moje reči su veoma obradovale Sanmej.
Dobro, evo još jedne dodatne tačke (ako ti se učini teškom, možeš preskočiti), Sanmej.
U panelu terminala IntelliJ IDEA-e možeš videti odgovarajuću java izvornu datoteku i kompiliranu .class datoteku.
Na odgovarajućoj datoteci možeš desnim klikom izabrati „open in terminal" da je otvoriš.

Komandom pwd vidiš trenutnu putanju paketa, a komandom ls koje se datoteke nalaze ispod te putanje.

Class datoteka se nalazi u direktorijumu target: classes sadrži class datoteke iz direktorijuma src/main; test-classes sadrži class datoteke iz direktorijuma src/test.

„Erge, kakav je odnos između .class datoteke i .java izvornog koda?" Sanmej ipak voli da uči — pitanja koja postavlja uvek pogađaju suštinu.
„Bravo, bravo, našla si baš važnu tačku."
Datoteka .java je izvorni kod, ono što mi programeri možemo da razumemo i pišemo; .class je datoteka bajtkoda, dobijena nakon kompiliranja sa javac, i nju izvršava JVM.
„Sanmej, uzgred ću ti objasniti i da li je Java kompilirani ili interpretirani jezik."
„Rado, baš sam htela da pitam šta taj „kompilirati" zapravo znači."
Prva faza Jave je da komandom javac izvorni kod prevede u bajtkod.
Na primer, možemo ručno izvršiti javac Hello.java da izvornu datoteku kompiliramo u Hello.class (uz IntelliJ IDEA ne moramo ručno pozivati „javac" — direktnim pokretanjem se automatski generiše .class datoteka).

Zatim možemo komandom java pokrenuti bajtkod (na primer java Hello); u tom trenutku postoje dva načina obrade.
- Bajtkod se interpretira i izvršava od strane JVM-a, naredba po naredba.
- Deo bajtkoda se JIT kompilira (kompilacija u letu, vidi link) u mašinske instrukcije i izvršava direktno.
① Interpretacija, naredba po naredba:
Interpretacija je osnovni režim izvršavanja Java virtuelne mašine. U tom režimu JVM redom čita instrukcije iz datoteke bajtkoda i prevodi ih u odgovarajuće nisko-nivojske operacije. Prednost interpretacije je jednostavna realizacija i brži start, ali pošto se pri svakom izvršenju bajtkod ponovo interpretira, efikasnost izvršavanja je relativno niža.
Ukratko, odlike interpretacije:
- Jednostavna realizacija
- Brži start
- Niža efikasnost izvršavanja
② JIT kompilacija u letu:
Da bi se poboljšala efikasnost Java programa, JVM uvodi tehniku kompilacije u letu (JIT, Just-In-Time Compilation). U JIT režimu JVM u toku rada često izvršavani bajtkod prevodi u lokalni mašinski kod, koji se zatim može direktno izvršavati na hardveru, bez ponovne interpretacije. Rezultat je znatno veća brzina izvršavanja programa. Treba napomenuti da JIT kompilator ne kompilira sav bajtkod, već prema određenoj strategiji kompilira samo često pozivane segmente koda (vrući kod, tzv. hotspot).
Ukratko, odlike JIT kompilacije u letu:
- Veća efikasnost izvršavanja
- Kompilira vrući kod
- Dinamička optimizacija
U praksi, savremene Java virtuelne mašine (poput HotSpot) obično kombinuju oba načina — i interpretaciju i JIT kompilaciju. Na početku rada programa JVM koristi interpretaciju, da bi skratila vreme starta. Tokom rada, JVM prepoznaje vrući kod i JIT kompilator ga prevodi u lokalni mašinski kod, čime se povećava efikasnost izvršavanja. Ova kombinovana strategija naziva se mešoviti režim.
Dakle, radi unakrsne platforme, Java izvorni kod se prvo kompilira u bajtkod; bajtkod nije mašinski jezik i potrebno je da ga JVM interpretira.

Zbog tog posredničkog sloja JVM, efikasnost rada Jave nije tako visoka kao kad se izvorni kod direktno kompilira u mašinski kod — to bi trebalo da je jasno, posrednik dodaje trošak. Zato JVM uvodi JIT kompilator, koji često izvršavani bajtkod direktno pretvara u mašinski kod.
Dakle, Java je istovremeno i interpretirana i kompilirana. Ali obično kažemo „Java je kompilirani jezik", iako to nije sasvim tačno — uglavnom zato što je JIT došao kasnije, pa važi „prvi utisak vlada".
„Dobro, Erge, razumem."
Otvoreno skladište znanja sa 17000+ zvezdica na GitHubu, „Ergeova staza ka Java majstorstvu", konačno dobija svoje prvo izdanje PDF-a! Obuhvata osnovnu sintaksu Jave, nizove i stringove, OOP, okvir za kolekcije, Java IO, obradu izuzetaka, nove osobine Jave, mrežno programiranje, NIO, konkurentno programiranje, JVM itd. — ukupno preko 320 000 reči i 500+ ručno nacrtanih dijagrama, možemo reći razumljivo i duhovito.
