Java fordítási folyamat, alapok
Tematika
- A Java fordítási folyamata (fordító, bytecode, JVM)
- Egyszerű Java program írása szövegszerkesztővel — Windows és Linux
- Fordítás és futtatás parancssorból/terminálból
- Áttérés IDE használatára
- Alaputasítások: ciklus (
for,while,do-while), elágazás - Kiírás képernyőre
- Parancssori argumentumok
Kontextus
A mai óra célja, hogy lássátok, mi történik egy Java program mögött, mielőtt egy IDE ezt kényelmesen elrejtené előletek. Ezért ma előbb szövegszerkesztőben és parancssorból dolgozunk, és csak ezután térünk át IDE-re — hogy tudjátok, mit automatizál majd helyettetek az IDE.
A vezérlési szerkezeteket (ciklus, elágazás), a változókat és a kiírást már ismeritek az előző félévből (Magas szintű programozási nyelvek 1) — ma ezeket Java szintaxisban gyakoroljuk be.
A Java fordítási folyamata
Java: A Java egy statikusan típusos, objektumorientált programozási nyelv. A Java forráskód nem közvetlenül gépi kódra fordul, hanem egy platformfüggetlen köztes formátumra.
Fordító (compiler): A javac parancs
a Java forráskódot (.java fájl) bytecode-dá
fordítja (.class fájl). Ez a fogalom (fordító vs.
interpreter) már ismerős az előző félévből — a javac
a fordító szerepét tölti be.
Bytecode: Platformfüggetlen köztes formátum — nem a konkrét gép gépi kódja, hanem egy szabványosított köztes reprezentáció.
JVM (Java Virtual Machine): A JVM (Java Virtuális Gép) egy olyan
szoftveres virtuális gép, amely végrehajtja a fordított Java
bájt-kódot, és futtatókörnyezetet biztosít a Java-alkalmazások
számára.
A java
parancs elindítja a JVM-et, amely a bytecode-ot futtatja, és
közben az adott gépre/operációs rendszerre szabja a végrehajtást.
Emiatt mondjuk, hogy a Java "write once, run anywhere" elvű:
ugyanaz a lefordított .class fájl bármely gépen
lefut, amin van JVM.
A folyamat összefoglalva:
Hello.java --(javac)--> Hello.class (bytecode) --(java, JVM)--> futó program
Egyszerű Java program írása szövegszerkesztővel
Most megírjuk az első programot szövegszerkesztőben , hogy lássátok a nyers folyamatot.
A program
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
Amit tisztázni kell:
- Minden Java kódnak egy osztályon belül kell lennie. Az osztály fogalmát részletesen egy későbbi órán tárgyaljuk — most elég annyit tudni, hogy ez egy kötelező "burok" minden Java kód köré.
- A fájl neve kötelezően meg kell egyezzen a benne lévő
publicosztály nevével — tehátHello.java. - A
mainmetódus a program belépési pontja — innen indul a végrehajtás.
Windows
- Nyissatok egy szövegszerkesztőt (pl. Jegyzettömb/Notepad), és mentsétek el a fenti kódot
Hello.javanéven. - Nyissatok parancssort (cmd/PowerShell) a fájl könyvtárában.
- Fordítás:
javac Hello.java→ létrejön aHello.class. - Futtatás:
java Hello.
Linux
- Nyissatok egy szövegszerkesztőt (pl.
nano,gedit, vagy bármi kényelmes), és mentsétek elHello.javanéven. - Nyissatok terminált a fájl könyvtárában.
- Fordítás:
javac Hello.java. - Futtatás:
java Hello.
Fontos megfigyelés: a folyamat mindkét operációs
rendszeren ugyanaz — csak a szövegszerkesztő és a
parancssor/terminál neve más. A javac/java
parancsok és a fordítási modell platformfüggetlen.
Áttérés IDE használatára
IDE (Integrated Development Environment): Egy
alkalmazás, amely egy helyen biztosítja a kódszerkesztést, a
fordítást, a futtatást és a hibakeresést — a fenti lépéseket
(szerkesztés → javac → java) egyetlen
gombnyomásra végzi el helyettünk.
A gyakorlatokon IntelliJ IDEA-t használunk. Lépések:
File → New → Project..., majdNew Projectablakban: nyelv = Java, build system = IntelliJ (egyelőre nincs szükség Maven/Gradle-re), és válasszunk egy telepített JDK-t.- Az új projektben
srcmappán jobb klikk →New → Java Class, név:Hello. - Ugyanaz a
Helloosztály megírása, amit az előbb szövegszerkesztőben is megírtunk. - Futtatás: a
mainmetódus melletti zöld ▶ ikonra kattintva, vagy jobb klikk a fájlon →Run 'Hello.main()'. - Figyeljétek meg: az IntelliJ alsó Run paneljén megjelenik a program kimenete — a háttérben ugyanaz a
javac/javafolyamat fut, amit az előbb kézzel csináltunk.
Érdemes tudatosítani: az IDE egy kényelmi réteg a már megismert fordítási folyamat fölött (automatikus fordítás, hibajelzés, kódkiegészítés, debugger).
Alaputasítások: ciklus, elágazás
Ez a rész nem új fogalom, csak a már ismert vezérlési szerkezetek Java szintaxisa.
int grade = 75;
if (grade >= 60) {
System.out.println("Sikeres vizsga");
} else {
System.out.println("Sikertelen vizsga");
}
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
int j = 0;
do {
System.out.println(j);
j++;
} while (j < 5);
A szerkezet ugyanaz, amit az előző félévben megszoktatok — a Java C-szerű szintaxist használ ehhez.
do-while: A while-tól eltérően a
do-while ciklus magját előbb végrehajtja, és
csak utána vizsgálja a feltételt — ezért a törzse mindig
lefut legalább egyszer, még akkor is, ha a feltétel már az elején
hamis. Példa, ahol ez látszik:
int k = 10;
do {
System.out.println("Ez lefut, pedig k már nem kisebb 5-nél: " + k);
} while (k < 5);
Kiírás képernyőre
System.out.println("Ez egy sor, sortöréssel a végén.");
System.out.print("Ez nem tör sort a végén.");
System.out.printf("Formázott kiírás: %d db, %.2f átlag%n", 5, 4.25);
println— sortöréssel zárprint— nem tör sortprintf— formázott kiírás (később, más nyelvekből már ismert%d,%s,%fmintázatokkal)
Parancssori argumentumok
A main metódus String[] args paramétere
a parancssorból/IDE-ből átadott argumentumokat tartalmazza — ezt a
fogalmat már ismeritek az előző félévből.
public class Greet {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Szia, " + args[0] + "!");
} else {
System.out.println("Szia, ismeretlen!");
}
}
}
- Parancssorból:
java Greet Anna -
IntelliJ IDEA-ban:
- Futtassátok egyszer a programot (▶ ikon), hogy létrejöjjön hozzá egy Run Configuration.
Run → Edit Configurations...(vagy a futtatás gomb melletti legördülő menü →Edit Configurations...).- Válasszátok ki a
Greetkonfigurációt a bal oldali listából. - A
Program argumentsmezőbe írjátok be:Anna. OK, majd futtassátok újra — a program most már megkapja az argumentumot.
Gyakorlat
- Írjatok egy
Greet.javaprogramot szövegszerkesztőben, fordítsátok és futtassátok parancssorból/terminálból, parancssori argumentummal. - Ugyanezt a programot hozzátok létre IDE-ben is, és futtassátok onnan is (argumentummal együtt).
- Bővítsétek egy ciklussal: írja ki a nevet 3-szor, egy
forciklussal. - Bővítsétek egy elágazással: ha nincs megadva argumentum, írjon ki egy alapértelmezett üzenetet.
Hasznosnak találtad ezt a jegyzetet?
Ezek a jegyzetek minden hallgató számára ingyenesek. Ha időt spóroltál vele, fontold meg egy borravaló hagyását.
☕ Hívj meg egy kávéra