Šta se dešava sa Java programom tokom faze prevođenja?
manje gledaj u telefon, manje igraj igrice, uči lepo, divna si."); } }
Kliknite na dugme čekića u alatnoj traci IDEA-e (`Build → Build Project`, prevođenje celog projekta).
Tada možete u direktorijumu target, koji se nalazi uz src, pronaći fajl HelloWorld.class:
```text
src/
└── com/javasi/five/
└── HelloWorld.java
target/
└── classes/
└── com/javasi/five/
└── HelloWorld.classUkoliko ga ne možete pronaći, desnim klikom na direktorijum izaberite „Reload from Disk, ponovo učitaj sa diska”.
Možete ga otvoriti dvoklikom.
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.javasi.five;
public class HelloWorld {
public HelloWorld() {
}
public static void main(String[] args) {
System.out.println("Zdravo svete!");
}
}IDEA podrazumevano, pomoću alata za dekompilaciju Fernflower, prevodi bytecode fajl (fajl sa sufiksom .class, odnosno fajl dobijen prevođenjem Java izvornog koda) nazad u Java izvorni kod razumljiv čoveku. Međutim, bytecode fajl zapravo ne izgleda ovako, već ovako:
// class version 58.0 (58)
// access flags 0x21
public class com/javasi/five/HelloWorld {
// compiled from: HelloWorld.java
// access flags 0x1
public <init>()V
L0
LINENUMBER 6 L0
ALOAD 0
INVOKESPECIAL java/lang/Object.<init> ()V
RETURN
L1
LOCALVARIABLE this Lcom/javasi/five/HelloWorld; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
// access flags 0x9
public static main([Ljava/lang/String;)V
L0
LINENUMBER 8 L0
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
LDC "\u4e09\u59b9\uff0c\u5c11\u770b\u624b\u673a\u5c11\u6253\u6e38\u620f\uff0c\u597d\u597d\u5b66\uff0c\u7f8e\u7f8e\u54d2\u3002"
INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
L1
LINENUMBER 9 L1
RETURN
L2
LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
MAXSTACK = 2
MAXLOCALS = 1
}Da li ste malo zbunjene? Početnicima ovaj prikaz lako deluje zastrašujuće, ali ne brinite — kasnije ćemo se zajedno dublje upustiti u to; ovde samo osetite čar bytecode-a.
A kako se do ovog bytecode fajla dolazi? Možete ga pregledati preko stavke menija IDEA-e „View” → „Show Bytecode”, kao što je prikazano na slici ispod.

PS: bytecode nisu mašinski kod, operativni sistem ih ne može neposredno prepoznati; potrebno je da na operativni sistem instalirate različite verzije Java virtuelne mašine (JVM) koje bi ih prepoznale. Obično je dovoljno da instalirate različite verzije JDK-a (Java Development Kit, Java razvojni alat), u kojima je sadržan JRE (Java Runtime Environment, Java runtime okruženje), a JRE opet sadrži JVM.

Operativni sistemi poput Windows, Linux, MacOS imaju odgovarajuće JDK; čim instalirate JDK, imate runtime okruženje za Java jezik i možete izvršavati jedan te isti bytecode fajl na različitim platformama. Različite verzije JDK-a mogu se preuzeti sa Oracle-ovog zvaničnog sajta.

PPS: zašto pregledati bytecode? Pregled bytecode fajla lakše nam otkriva principe koji stoje iza Java koda, na primer suštinu raznih sintaksnih šećera u Javi.
U poređenju sa ugrađenom funkcijom „Show Bytecode” u IDEA-i, preporučujem dodatak jclasslib, koji se može instalirati iz prodavnice dodataka (ja sam ga već instalirao).

Nakon instalacije, klikom na View → Show Bytecode With jclasslib bytecode fajl možete pregledati pomoću jclasslib-a (pre klika kursor mora ostati na odgovarajućem fajlu klase) — prikazuju se instrukcije sa ofsetima i komentarima.
Pomoću jclasslib-a ne možete samo intuitivno pregledati bytecode fajl klase, već i osnovne podatke o klasi, constant pool, interfejse, polja, metode itd. — sve u uređenom stablu sa leve strane prozora.
Drugim rečima, u fazi prevođenja Java izvorni kod fajla prevodi u bytecode fajl:
U toj fazi kompilator obavlja i određene provere — na primer, da li je neka ključna reč pogrešno napisana, da li sintaksa odgovara očekivanjima; ne smeju postojati očigledne greške, jer bi njihovo otkrivanje tek u runtime-u bilo prilično nezgodno.
