Nech su definovane nizsie uvedene metody. a) Aka postupnost prikazov sa vykona? b) Aka postupnost prikazov sa vykona po zakomentovani riadku "retazec = null;" ? public static void main(String[] args) { try { System.out.println("blok try - vonkajsi (zaciatok)"); String retazec = "male pismena"; retazec = null; //aka bude postupnost prikazov po zakomentovani tohoto riadku? pracujSRetazcom(retazec); System.out.println("blok try - vonkajsi (dokonceny)"); } catch (NullPointerException objektVynimky) { System.out.println("blok catch - vonkajsi (nulovy pointer)"); } finally { System.out.println("blok finally - vonkajsi"); } System.out.println("dalsi kod programu"); } public static void pracujSRetazcom(String retazec) { try{ System.out.println("blok try - vnutorny (zaciatok)"); System.out.println(retazec.charAt(50));//NullPointerException System.out.println("blok try - vnutorny (dokonceny)"); } catch (IndexOutOfBoundsException objektVynimky) { System.out.println("blok catch - vnutorny (index mimo rozsahu)"); } finally { System.out.println("blok finally - vnutorny"); } System.out.println("koniec metódy"); } -------------------------------------------------------------------------------- Nech je definovana trieda Fronta. Zistite co su to kontrolovane vynimky. Vytvorte dalsie 3 triedy reprezentujuce kontrolovane vynimky vyhadzovane pri tychto typoch chyb: - pokus o nastavenie zapornej kapacity fronty (pri vytvarani) - pokus o pridanie udaju do plnej fronty - pokus o vyber udaju z prazdnej fronty Vynimky nech v sprave obsahuju podrobnosti o chybe (popis, kapacitu, udaj ktory sa nepodarilo pridat). Zmente implementaciu triedy Fronta tak, aby pri tychto chybach jej konstruktor a metody vyhadzovali prislusne vynimky. V maine otestujte zachytenie vynimiek. Pomocou volania metody getMessage zistite a vypiste podrobne informacie o chybe. //Fronta s pevnou kapacitou (maximalnym poctom udajov). //Je implementovana pomocou cyklickeho zoznamu. public class Fronta { private String[] udaje; private int indexPrveho; private int pocetUdajov; //Vytvori frontu so zadanou kapacitou 'kapacita' //Ak je kapacita zaporna, tak vyhodi vynimku (doplnit nazov) public Fronta(int kapacita) { //vyhodit vynimku ak je kapacita zaporna (sprava bude obsahovat zadanu kapacitu) udaje = new String[kapacita]; indexPrveho = 0; pocetUdajov = 0; } //Prida prvok 'udaj' na koniec fronty //Ak je fronta pred volanim metody plna, tak vyhodi vynimku (doplnit nazov) public void pridaj(String udaj) { if( pocetUdajov < udaje.length ) { int index = (indexPrveho + pocetUdajov) % udaje.length; udaje[index] = udaj; pocetUdajov ++; } else {System.err.println("pridaj"); //doplnit vyhodenie vynimky (sprava bude obsahovat udaj ktory sa nepodarilo vlozit) } } //Vyberie (odstrani) prvok zo zaciatku fronty a vrati ho //Ak je fronta pred volanim metody prazdna, tak vyhodi vynimku (doplnit nazov) public String vyber() { if( pocetUdajov > 0 ) { String vybrany = udaje[indexPrveho]; indexPrveho = (indexPrveho + 1) % udaje.length; pocetUdajov --; return vybrany; } else { return "namiesto vratenia tohoto retazca metoda musi vyhodit vynimku"; //zmenit na vyhodenie vynimky } } } -------------------------------------------------------------------------------- Nech su definovane triedy - Vysielac (simuluje vysielanie udajov do pocitacovej siete na urcitu adresu) - AdresaNeexistujeException (chyba pri vytvarani spojenia na neexistujucu adresu) - ChybaPosielaniaException (chyba pri posielani udajov) - ChybaUkonceniaException (chyba ukoncenia spojenia) V metode main otestujte zachytenie vynimiek a) bez try-with-resource (treba pouzit 2 krat blok try) b) pouzitim try-with-resource (trieda Vysielac implementuje rozhranie AutoCloseable) public class AdresaNeexistujeException extends Exception { public AdresaNeexistujeException(String adresa) { super("adresa \"" + adresa + "\" neexistuje"); } } public class ChybaPosielaniaException extends Exception { public ChybaPosielaniaException(String adresa, String udaj) { super("chyba pri posielani udaju \"" + udaj + "\" na adresu \"" + adresa + "\""); } } public class ChybaUkonceniaException extends Exception{ public ChybaUkonceniaException(String adresa) { super("chyba pri ukonceni spojenia s adresou \"" + adresa + "\""); } } //Trieda simuluje vysielac udajov do pocitacovej siete public class Vysielac implements AutoCloseable{ private String adresa; //Otvori spojenie na adresu 'adresa' public Vysielac(String adresa) throws AdresaNeexistujeException { this.adresa = adresa; System.out.println("pripajam sa na adresu \"" + adresa + "\""); if( Math.random() < 0.2 ) { //simulacia chyby s pravdepodobnostou 20% throw new AdresaNeexistujeException(adresa); } } //posle 'udaj' cez vytvorene spojenie public void posli(String udaj) throws ChybaPosielaniaException { System.out.println("na adresu \"" + adresa + "\" posielam udaj \"" + udaj + "\""); if( Math.random() < 0.1 ) { //simulacia chyby s pravdepodobnostou 10% throw new ChybaPosielaniaException(adresa, udaj); } } //ukonci spojenie @Override public void close() throws ChybaUkonceniaException { System.out.println("korektne uzatvorenie spojenia s adresou \"" + adresa + "\""); if( Math.random() < 0.2 ) { //simulacia chyby s pravdepodobnostou 20% throw new ChybaUkonceniaException(adresa); } } } Obsah metody main je priblizne nasledovny Vysielac vysielac = new Vysielac("fei.stuba.sk"); vysielac.posli("aaaa"); vysielac.posli("bbbb"); vysielac.posli("cccc"); vysielac.posli("dddd"); vysielac.close(); v ulohe a) bude potrebne testovat referenciu vysielac pred zatvorenim v ulohe b) bude metoda close volana automaticky