Programozás I. – Második ZH segédlet Ezen az oldalon: interfész létrehozás, megvalósítás; absztrakt osztály, metódus; belső osztály Interfész létrehozása: public interface InterfeszNeve { //Metódusok deklarációja (csak deklaráció!) } Interfész megvalósítása: public class OszalyNeve implements InterfeszNeve { //Az interfészben deklarált metódusok megvalósítása } Absztrakt osztály: (Nem példányosítható!) public abstract class OszalyNeve { //Adattagok //Metódusok deklarációja, megvalósítása //Az interfésszel ellentétben itt lehetnek megvalósított //metódusok is. } Absztrakt metódus (Csak absztrakt osztályon belül) A gyerekosztályban meg kell valósítani! public abstract void csinaljValamit(); Belső osztály (a belső osztály lehet privát, statikus is): public class KulsoOsztaly { //Adattagok private class BelsoOsztaly{ //Adattagok, metódusok } private BelsoOsztaly b = new BelsoOsztaly(); //Metódusok }
Ezen az oldalon: kivételtípusok, saját kivétel, kivételkezelés, kivétel dobásának jelzése, kivétel dobása; generikus listák létrehozása Kivételtípusok: Átalakításkor, például az Integer.parseInt() metódus dobhat ilyen kivételt. I/O műveletéknél dobódhat ilyen kivétel (pl.: IOException fájlból olvasás) tömb alul-, vagy túlindexelésénél előforduló ArrayIndexOutOfBoundException kivétel Exception Általános kivétel Saját kivétel osztály Az Exception osztályből kell származtatni! NumberFormatException
Kivételkezelés try { //A védett blokk, ahol olyan művelet történik //ami kivételt dobhat (pl.: fájlból olvasás) }catch(ExceptionType1 et1) { //Az ExceptionType1 típusú kivétel elkapása }catch(ExceptionType2 et2){ //Az ExceptionType2 típusú kivétel elkapása }catch(ExceptionType3 et3){ //Az ExceptionType3 típusú kivétel elkapása } finally { //Mindenképpen lefutó kódrészlet } Egy függvény dobhat kivételt: (fejlécében deklaráljuk) public void metodus() throws ExType1, ExType2 { //Kód } Kivétel dobása: throw new ExceptionType(); Generikus listák: List<Tipus> intList1 = new ArrayList<Tipus>(); List<Tipus> intList2 = new LinkedList<Tipus>();
Ezen az oldalon: Generikus listák bejárása iterátorral, for-each ciklussal, for ciklussal, generikus halmaz létrehozása Lista bejárása iterátorral: Iterator<Tipus> bejarLista = lista.iterator(); while (bejarLista.hasNext()){ Tipus aktualis = bejarLista.next(); //Művelet, amit az egyes elemekkel teszünk } Lista bejárása for-each ciklussal: for(Tipus valtozo : lista) { //Művelet, amit az egyes elemekkel teszünk //Itt "valtozo" néven hivatkozhatunk az adott elemre } Lista bejárása for ciklussal: for(int i=0; i < lista.size(); i++) { Tipus a = lista.get(i); //Művelet, amit az egyes elemekkel teszünk } Hozzáadás listához: lista.add(objektum); //A legelső üres indexre kerül be lista.add(index, objektum); //Adott indexre kerül be az //elem Egy adott elem eltávolítása a listából: lista.remove(index); //Adott indexű elemet törli lista.remove(objektum); //Az első megegyező objektumot //törli //Ha a listában több megegyező //objektum van, akkor is csak az elsőt // törli Egy kollekció eltávolítása a listából: (pl.: egy részlista) lista.removeAll(masikLista); Egy elem benne van-e a listában: lista.contains(Objektum) // true, ha igen Generikus halmaz: Set<Tipus> mySet1 = new HashSet<Tipus>(); Set<Tipus> mySet2 = new TreeSet<Tipus>();
Ezen az oldalon: hozzáadás halmazhoz, törlés halmazból; halmaz tartalmaz-e egy adott elemet; halmaz bejárása; generikus map, hozzáadás, elem benne van-e Hozzáadás a halmazhoz: halmaz.add(Objektum); // Minden elem csak egyszer // szerepelhet benne Egy adott elem eltávolítása a halmazból: halmaz.remove(Objektum); Egy kollekció eltávolítása a halmazból: (pl.: egy részhamaz) halmaz.removeAll(masikHalmaz); Egy elem benne van-e a halmazban: halmaz.contains(Objektum) // true, ha igen Halmaz bejárása iterátorral: Iterator<Tipus> bejarHalmaz = halmaz.iterator(); while (bejarHalmaz.hasNext()){ Tipus aktualis = bejarHalmaz.next(); //Művelet, amit az egyes elemekkel teszünk } Generikus map: (kulcs-érték párok halmaza) Map<Tipus1, Tipus2> map = new HashMap<Tipus1, Tipus2>(); Map<Tipus1, Tipus2> map2 = new TreeMap<Tipus1, Tipus2>(); Map-be kulcs-érték behelyezése: map.put(kulcs, érték); Generikus map iterátor Iterator<Map.Entry
> it = map.entrySet().iterator(); Map adott kulcsához tartozó érték: ErtekTipkus v = map.get(kulcs); Egy adott kulcs benne van-e a mapben: map.containsKey(KulcsTipus) //Igaz, ha tartalmazza. Egy adott érték benne van-e a mapben: map.containsValue(ErtekTipus) //Igaz, ha tartalmazza.
Ezen az oldalon: map bejárása iterátorral; beolvasás konzolról, fájlból; fájlbaírás; StringTokenizer Map bejárása iterátorral: for (Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String,Integer> e = it.next(); //Kulcs: String k = e.getKey(); //Érték : int v = e.getValue(); } Beolvasás konzolról: Scanner sc = new Scanner(System.in); int i = sc.nextInt(); long l = sc.nextLong(); //egész szám beolvasása double d = sc.nextDouble(); //lebegőpontos beolvasása float f = sc.nextFloat(); //lebegőpontos beolvasása boolean b = sc.nextBoolean(); //Boolean beolvasása String str = sc.next(); //String beolvasása String str = sc.nextLine(); //Egész sor beolvasása Beolvasás fájlból (soronként): BufferedReader be = new BufferedReader(new FileReader(new File("fajlnev.txt"))); String line = null; while ((line = br.readLine()) != null) { //A sorral végzendő művelet (pl.: darabolás) } be.close(); Kiíratás fájlba: FileWriter ki = new FileWriter(new File("textfajl.txt")); ki.write("Szöveg"); ki.close(); //A megnyitott fájl bezárása String feldarabolás (StringTokenizer): String s = "sor amit tordelni kell"; StringTokenizer st = new StringTokenizer(s); //Beépített //elválasztókarakterek StringTokenizer st2 = new StringTokenizer(s, ";"); //Saját //elválasztókarakterek
Ezen az oldalon: StringTokenizer – feldarabolt szöveg bejárása, split, véletlen szám generálás Feldarabolt szöveg bejárása: while(st.hasMoreTokens()) { String resz = st.nextToken(); } String feldarabolása a split() segítségével: String szoveg = "elso-masodik-harmadik"; String[] darabok = szoveg.split("-"); String elsoresz = darabok[0]; //elso String masodikresz = darabok[1]; //masodik String harmadikresz = darabok[2]; //harmadik Véletlenszám generálása: Random r = new Random(); int randomInt = r.nextInt(); int randomInt2 = r.nextInt(101); // 0-100 között generál // egy véletlenszámot double randomDouble = r.nextDouble(); A segédanyagot készítette: Antal Gábor. A segédanyagban előfordulhatnak esetlegesen hibák, elírások, ha valaki talál, akkor kérem jelezze felém az [email protected] címen. Mindenkinek sok sikert kívánok a zh-hoz.