Java fordítási folyamat, alapok

Magas szintű programozási nyelvek 2 (INBPM0315-21) · 1. labor gyakorlat · Frissítve: 2026-09-05

Tematika

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.

Hirdetés

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:

Windows

  1. Nyissatok egy szövegszerkesztőt (pl. Jegyzettömb/Notepad), és mentsétek el a fenti kódot Hello.java néven.
  2. Nyissatok parancssort (cmd/PowerShell) a fájl könyvtárában.
  3. Fordítás: javac Hello.java → létrejön a Hello.class.
  4. Futtatás: java Hello.

Linux

  1. Nyissatok egy szövegszerkesztőt (pl. nano, gedit, vagy bármi kényelmes), és mentsétek el Hello.java néven.
  2. Nyissatok terminált a fájl könyvtárában.
  3. Fordítás: javac Hello.java.
  4. 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.

Hirdetés

Á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 → javacjava) egyetlen gombnyomásra végzi el helyettünk.

A gyakorlatokon IntelliJ IDEA-t használunk. Lépések:

  1. File → New → Project..., majd New Project ablakban: nyelv = Java, build system = IntelliJ (egyelőre nincs szükség Maven/Gradle-re), és válasszunk egy telepített JDK-t.
  2. Az új projektben src mappán jobb klikk → New → Java Class, név: Hello.
  3. Ugyanaz a Hello osztály megírása, amit az előbb szövegszerkesztőben is megírtunk.
  4. Futtatás: a main metódus melletti zöld ▶ ikonra kattintva, vagy jobb klikk a fájlon → Run 'Hello.main()'.
  5. Figyeljétek meg: az IntelliJ alsó Run paneljén megjelenik a program kimenete — a háttérben ugyanaz a javac/java folyamat 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);

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!");
        }
    }
}

Gyakorlat

  1. Írjatok egy Greet.java programot szövegszerkesztőben, fordítsátok és futtassátok parancssorból/terminálból, parancssori argumentummal.
  2. Ugyanezt a programot hozzátok létre IDE-ben is, és futtassátok onnan is (argumentummal együtt).
  3. Bővítsétek egy ciklussal: írja ki a nevet 3-szor, egy for ciklussal.
  4. Bővítsétek egy elágazással: ha nincs megadva argumentum, írjon ki egy alapértelmezett üzenetet.
Hirdetés

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