Podučavanje sestre Javi: prvi Java program — Hello World
„Sanmej, danas ćemo napisati prvi Java program — Hello World. Uzbuđena ste?"
Sanmej je klimnula glavom u znak slaganja (😂).
„Dobro, krenimo odmah."
Otvori IntelliJ IDEA, napravi novi projekat za učenje Jave: kliknite File → New → Project.
Izaberi verziju JDK-a, na primer JDK 8 koji smo ranije instalirali.
Možete izabrati i JDK 11 ili najnoviji JDK 17, ili dodati novu verziju JDK-a, ali (ne preporučuje se).
Zatim kliknite „next", sve dok ne unesete ime projekta, na primer tobebetterjavaerdemo.

Zatim kliknite finish, nakon čega ćete videti interfejs novog projekta.
Ako se tema vaše IntelliJ IDEA-e razlikuje od Autorove, nije problem; naravno, ako ste tip koji voli lepo, možete instalirati dodatak Vuesion Theme — način instalacije naći ćete 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 morate znati česte engleske reči; ako ne znate, nauči).
Desni klik na direktorijum src, u meniju redom izaberite New → Java Class.
Unesi ime klase (šta je klasa, obradićemo kasnije), obrati pažnju da velika i mala slova utiču, zatim pritisnite enter.
Dobićete ovakav kod.
public class HelloWorld {
public static void main(String[] args) {
}
}Komentare je Autor već konfigurisao; ako kod vas 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 pritisnite enter.
IntelliJ IDEA će automatski generisati main metod, odnosno ovaj kod.

Zatim u main metodu otkucaj so, sačekaj predlog, pa pritisnite 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() unesite "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 izaberite „Run 'HelloWorld.main()"'.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}Nakon što IntelliJ IDEA kompilira i pokrene kod, na konzoli ćete videti ovakav ispis.
HelloWorld
Process finished with exit code 0To znači da je naš prvi Java kod gotov — čestitaj sebi, Sanmej!
„Erge, predivan ste, 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žete sve da zapamtite, 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 vam se učini teškom, možete preskočiti), Sanmej.
U panelu terminala IntelliJ IDEA-e možete videti odgovarajuću java izvornu datoteku i kompiliranu .class datoteku.
Na odgovarajućoj datoteci možete desnim klikom izabrati „open in terminal" da je otvorite.
Komandom pwd vidite 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.
paicoding-web/
├── src/
│ ├── main/
│ └── test/
└── target/
├── classes/ ← .class datoteke iz src/main
└── test-classes/ ← .class datoteke iz 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 ste 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 vam 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, Autor, razumem."
Otvoreno skladište znanja sa 17000+ zvezdica na GitHubu, „Put ka boljoj Javi", 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.
