Gyakorlati alapok III.

A main() tulajdonságai az osztályok környezetében

 

Egy rövid fejezet kedvéért el kell időznünk a main() főprogram tulajdonságainak magasabb szintű értelmezése felett, hiszen a Gyakorlati Alapok III. című fejezetcsomag ismerteti az objektumorientált programozás legfontosabb alkotóelemeinek, az osztályok működését és meg kell vizsgálnunk azok main() főprogramhoz fűződő viszonyát. Bevezetésképpen ismételjük az egyik legegyszerűbb futtatható Java-kódunkat:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

 

Végeredmény:

Hello World!
 

class Main + Main.java

 

A fenti kód az Ön számítógépes környezetében csakis akkor lesz futtatható, ha az osztálynév (jelen esetben Main) és a kódot tartalmazó forrásállomány neve (jelen esetben Main.java) megegyezik; ezen egyezés nélkül fordítási hibát kapunk.

 

Amint azt Az adatok, metódusok elnevezésének problémái című fejezetben már tisztáztuk, a Java megkülönbözteti a kis-, és nagybetűket (case sensitive), így az alábbi betűpárosítás, valamint bármilyen variációi...

 

class Main + main.java

class main + Main.java

class Main + MAIN.java

stb.

 

...fordítási hibát fognak okozni.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A fentiek alapján már egyértelművé vált, hogy a Main osztálynév voltaképpen bármely szabványosnak mondható névre átnevezhető, ekkor tehát az osztálynévnek és a forrásállomány nevének kell pontosan megegyeznie, például:

 

class Alkalmazas + Alkalmazas.java

 

Ha a kódot egyszerű szövegszerkesztőben gépeljük be, akkor a keletkezett fájl kiterjesztését át kell neveznünk .java kiterjesztésre, például:

 

.txt -> .java

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Figyelem! Bonyolultabb szövegszerkesztő használata esetén (például MS Word) egyéb, főként formázási karakterek is kerülhetnek a kódba, amelyet az Eclipse fordítási hibaként fog értékelni!

 

Java-projekt

 

Az Eclipse-ben sokféle, akár alapszintű kezdőállományt is létrehozhatunk, ám mégis érdemes kezdettől fogva inkább magasabb, projektszintről kiindulni. Egy Java-projektet az Eclipse önálló és egyszerre fordítható fordítási egységként értelmez, valamint egyúttal magas szinten rendszerez is.

 

Fordítás után a .java forrásállományok ugyanolyan névvel, de .class kiterjesztésű bájtkóddá szintén a megadott projekt-könyvtárba fordulnak le (Interpreter-compiler-linker-bytekód és egy kis pinjin-átírás című fejezet), de...

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

...minden osztály azonos néven külön .class kiterjesztésű bájtkód-állományba kerül, még akkor is, ha 1 db .java forrásállományban több osztály is volt!

 

Illetőleg importálás után külső, például API-osztályok is becsatlakozhatnak a projektbe.

 

Itt jegyezzük meg, hogy az API-osztálykönyvtár a Java-rendszer és környezet által voltaképpen folyamatosan használt, tehát elérhető jelenléte létkérdés az eredményes futtatáshoz, ám nem minden része az, ezért némelyik API-komponenst importálnunk kell, míg másokat nem.

 

1 vagy több osztály + main()

 

Egy Java-projekt 1 vagy több osztályt, vele .java forrásállományt is tartalmazhat. Alapjában véve nem alapkövetelmény, bár sok helyen mégis elvárt, hogy a projektben résztvevő .java forrásállomány csak 1 osztályt tartalmazzon (hiszen amint fentebb említettük, valójában tartalmazhat többet is). A kód átláthatósága, illetve magasabb szempontok szerinti rendszerezése érdekében azonban érdemes ezt, azaz az 1 osztály - 1 .java forrásállomány elvet követnünk, amint például én is teszem a Gyerekszámológép című projektemben:

 

Gyerekszamologep

  • package megjelenes

    • Ablak.java

    • Main.java

    • Nevjegy.java

    • Nyomogomb.java

    • Szinpaletta.java

  • package szamolas

    • Szamologep.java

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A main() főprogramot tartalmazó osztálynak mindig publikusnak kell lennie!

Ha a projektben nincs main() főprogram, akkor a keletkezett állomány nem futtatható!

Bármennyi osztályt is tartalmaz a projekt, mégis csupán 1 db dedikált belépési pontja lehet, ez pedig valamelyik publikus osztályban 1 db main() főprogram.

 

Ugyanakkor semmit sem veszítünk, sőt, jobban rendszerezhetjük kódunkat, ha a main() főprogramot külön Main osztályba, vele külön .java forrásállományba tesszük. (Lásd a fenti gyerekszámolós példában!)

 

Több osztály + main()

 

Az Eclipse-n belül 1 projekt tartalmazhat több main() belépési pontot is. Ezt a lehetőséget nem javaslom, sőt a probléma kényes volta miatt külön fejezetben tárgyaljuk.

 

public static void main(String[] args)

 

Ezek már kizárólag a main() főprogram tulajdonságaihoz kötődnek:

  • public - A hozzáférés-módosítók című fejezet - A main() főprogramnak nyilvánosnak, mindenhonnan szabadon elérhetőnek kell lennie. Nélküle a programnak nem lesz belépési pontja, ezért nem tud lefutni.

  • static - Alapszinten a static módosítóról című fejezet - A static módosítóval illetett programkomponensek azonnal bekerülnek a műveleti memória egy, a JVM által kijelölt, statikus területére és onnan "nem is mozdulnak el". Pontosan ez a cél: hogy bizonyos programkomponensek számára jobban látható, stabilabb, ezáltal azonnali elérhetőséget biztosítson.

  • void - A main() főprogramnak nincs visszatérési értéke, azaz valójában nem függvény, "csak" eljárás.

  • String[] args - Egy .jar kiterjesztésű fájlt már parancssorból (konzolból) is indíthatunk (egy ehhez hasonló megoldás A "Hello World" Java-kód futtatása Windows-parancssorból című fejezetben tanulmányozható), a main() parancssoros futtatásához pedig további bemeneti paramétereket is beállíthatunk. Az args valójában bármire átnevezhető, például: String[] parameterek. Láthatóan itt a paraméterek típusa String tömb.