1. óra (2012.09.11.)
Diák
Feladatok
Parancssori argumentumok listázása
Standard outputra, illetve standard errorra írás, futtatásnál átirányítás külön fájlokba Megjegyzés: a valóságban a System.out.println és társai ritkán használtak, helyettük logolásra alkalmas könyvtárakat használunk, de ezek nem képezik a tantárgy anyagát.
Java programok fordítása, futtatása
A Java fordító például a C++-tól eltérően nem állít elő natív gépi kódot, így az közvetlenül nem is futtatható, a lefordított bájtkód végrehajtását a Java Virtuális Gép (JVM) végzi. A virtuális géppel való futtatáshoz a java parancsot szükséges kiadnunk, azonban paraméterként nem fájlnevet vár, hanem osztálynevet (lásd az alábbi példákban).
Fájl elnevezése: egy fájlba egy publikus osztály kerülhet, amelynek meg kell egyeznie a fájl kiterjesztés nélküli nevével. Azaz például a
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
programkód egy HelloWorld.java fájlba kell, hogy kerüljön. Ebben az esetben a fordítás és futtatás nagyon egyszerű (tegyük fel, hogy a fájlt tartalmazó könyvtárban "álunk"):
javac HelloWorld.java java HelloWorld
Fontos: fordításnál a fájlnév relatív elérési útvonallal, futtatáskor az osztálynév (ha csomagba ágyazott, akkor minősített névvel).
Vezérlési szerkezetek szintaxisa
Kb. C++.
// elágazás if (boolean_kifejezés) { // utasítások } else if (boolean_kifejezés) { // utasítások } else { // utasítások } // többágú elágazás (switch) switch (vmi) { case vmi1: // utasítások case vmi2: // utasítások case vmi3: // utasítások break; default: // utasítások } /* alkalmazható típusok (itt a vmi típusa): byte, short, char, int és csomagolóosztályaik (Byte, Short, Character, Integer), enum-ok és Java 7-től String-ek */ // for ciklus for (int i = 0; i < 10; i++) { // utasítások } // elöltesztelős ciklus while (boolean_kifejezés) { // utasítások } // hátultesztelős ciklus do { // utasítások } while (boolean_kifejezés); /* Ciklusokhoz: van break (címkézhető is!) és continue is. */
Konvenciók
Indentálás (tabolás): lásd a vezérlési szerkezetek példáit.
Névkonvenció: csomagnevek csupa kicsivel, osztálynevek PascalCase stílusban, metódus- és változónevek camelCase stílusban.
Alaptípusok
Primitív típusok: byte, short, int, long, float, double, boolean, char. Ezek csak értékek! A végrehajtási vermen foglalódnak, közvetlenül nem érhetők el rajtuk műveletek (pl. toString, parse műveletek). Megjegyzés: mindegyik számot reprezentáló típus előjeles, nincs unsigned.
Csomagolóosztályok: a fentiekhez tartozó Byte, Short, Integer, Long, Float, Double, Boolean, Character osztályok.
int i = 5; Integer iWrapper = Integer.valueOf(i); String string = iWrapper.toString(); // vagy Integer iWrapper = Integer.valueOf(5); String string = iWrapper.toString(); // lehetne, de inkább ne használjuk (lásd beépített cachek): Integer iWrapper = new Integer(i);
String osztály (nincs hozzá tartozó primitív típus (mi is lenne?...)).
Csomagok
Hierarchikus egymásbaágyazás, a csomagok hierarchiáját reprezentálja a forráskódokhoz tartozó könyvtárszerkezet. Lásd a csomagos és az állatos feladatot.
Szemétgyűjtő (Garbage Collector)
Egy egész jó leírás: http://hu.wikipedia.org/wiki/Garbage_collection.