01 grudzień 2011

Zagadka z Rethrowing Exceptions with More Inclusive Type Checking w Java 7

Czytając bardzo krótki, acz treściwy wpis A New Java Exception Handling Idiom o nowej cesze Java 7 - Rethrowing Exceptions with More Inclusive Type Checking pomyślałem o pewnej zagadce, której próba rozwiązania wymusi choćby minimalne zrozumienie zmian wokół obsługi wyjątków w najnowszym wydaniu Javy 7. Takie perełki sprawiają, że określenie zmian jako niewielkich w tym wydaniu jest czymś, z czym mam kłopot, aby się zgodzić.

Zagadka:
package pl.japila.java7;

public class PreciseRethrowDemo {

    public static void main(String[] args) throws Exception {
        PreciseRethrowDemo demo = new PreciseRethrowDemo();
        demo.createFoo();
    }

    Foo createFoo() throws FooException {
        Bar bar = new Bar();
        try {
            return new Foo(bar);
        } catch (Throwable t) {
            t = new SubFooException();
            bar.cleanup();
            throw t;
        }
    }

    @SuppressWarnings("serial")
    static class FooException extends Exception {}
    @SuppressWarnings("serial")
    static class SubFooException extends FooException {}
    static class Foo {
        Foo(Bar bar) throws FooException {
            throw new FooException();
        };
    }
    static class Bar {
        void cleanup() {};
    }

}
Czy powyższe skompiluje się? Jeśli tak, jaki będzie rezultat? Odpowiedzi można umieszczać w komentarzach. Proszę o kolejne zagadki, jeśli spotkałeś/-aś się z podobnymi w obszarze obsługi wyjątków w Java 7.

p.s. Za kilka dni - 17 grudnia 2011 - kończy się możliwość podejścia do testowego egzaminu na Oracle Certified Associate, Java SE 7 Programmer. System wyliczył mi koszt na poziomie 61 USD i przy niekorzystnym kursie USD/PLN mimo wszystko planuję podejść do niego za 2 tygodnie. A Ty?

7 komentarzy:

  1. Nie mogę za bardzo zrozumieć tej granicznej daty 17 grudnia dla egzamiu. Czy jest to data do której trzeba zaliczyć egzamin (przystąpić) czy się zarejestrować / wykupić?

    OdpowiedzUsuń na zawsze
  2. Nie wiem, ale domyślam się, że jest to data ostatniego dnia rejestracji na egzamin, który powinien odbyć się...cóż, nie wiem :( Proponuję podejść 17.12.

    OdpowiedzUsuń na zawsze
  3. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń na zawsze
  4. Cześć Jacku!
    Mam na imię Łukasz. Pierwszy raz zobaczyłem Cię na JDD2011 (moja pierwsza konferencja) i kieruję do Ciebie słowa uznania za entuzjazm i pasję.

    Chciałem Cię zapytać czy planujesz podejścć do zdawania certyfikatu 'Upgrade to Java SE 7 Programmer'? Z tego co widzę, to egzamin w finalnej wersji będzie dostępny koło lutego ( 10 weeks from exam close date). Mam jeszcze pytanie odnośnie wersji podstawowej, nie upgrade. Widzę, że są dwa poziomy: 'Java SE 7 Programmer I i II'. Wiesz może co one oznaczają? Pozdrawiam.

    OdpowiedzUsuń na zawsze
  5. Cześć Łukasz!
    Nie śledzę rozwoju certyfikatów i stąd niewiele wiem na ich temat. Ostatnio zobaczyłem, że Java SE 7 Programmer I pojawił się w wersji BETA i można do niego podchodzić do 17.12. Ja podchodzę!

    OdpowiedzUsuń na zawsze
  6. Wielkie dzieki Jacek za wzmianke w artykule o beta testach.

    Wydaje sie, ze "close date" dla beta certyfikatow jest ostateczna data przystapienia do egzaminu (rejestracja przypuszczalnie najpozniej dzien wczesniej). Sprawdzilem kilka centrow i w zadnym nie mozna zabukowac miejsca po wyznaczonym przez Oracle terminie.

    Probujac odpowiedziec na pytanie Łukasza odnosnie "1Z1-804" - egzamin jest caly czas w przygotowaniu, ale IMO mozna sie spodziewac tego samego co w 1Z1-805 ("Upgrade to Java SE 7 Programmer"), tj. duzo API (NIO2, JDBC 4.1, resource bundle), na 100% watki i oczywiscie fundamentals (Java SE 7).

    PS: 1Z1-805 "Upgrade to Java SE 7 Programmer" jest dostepny do 7.01.2012.

    Szczegoly nt. beta testow na: http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=182&p_org_id=27&lang=US#2

    OdpowiedzUsuń na zawsze
  7. Dla mnie już jest wszystko jasne odnośnie Java SE 7 Programmer I i II. Wersja I to odpowiednik Associate (podstawy Javy SE) a wersja II to już poziom zbliżony do SCJP (doszły nowe wymagania).

    @Jacku, pochwal się jak wrażenia po egzaminie w wersji beta. Ja planuję podejść do Upgrade, ale jak będzie już finalna wersja i trochę materiałów do nauki bo na razie nie wiadomo czego się spodziewać.

    OdpowiedzUsuń na zawsze