CodeGym /Blog Java /Random-PL /Stary poziom 09
John Squirrels
Poziom 41
San Francisco

Stary poziom 09

Opublikowano w grupie Random-PL

Wiedza kontra umiejętności

Stary poziom 09 - 1College nauczył nas, że nie ma wielkiej różnicy między teorią a praktyką. Cóż, na pewno rozumiesz, że to nie to samo. Ale nie widzisz zasadniczej różnicy. A jednak jest jeden. Większość ludzi stawia znak równości między „wiem” a „mogę”. Czy ty? A może kilka przykładów?
  1. Wiem, że palenie jest dla mnie złe, ale palę.
  2. Wiem, że fast foody mi szkodzą, ale jem.
  3. Znam przepisy ruchu drogowego, ale nie umiem prowadzić.
  4. Wiem, że bieganie jest dla mnie dobre, ale nie biegam rano.
Często zdarza się, że ludzie biorą „wiem” za „mogę”. To dobry przykład z przepisami ruchu drogowego. Czy jeśli ktoś zna przepisy i umie jeździć, to znaczy, że może prowadzić? Nie. Co jeśli myśli, że umie prowadzić? Po co mu więc instruktor – on już wszystko wie. Kiedy jesteś pewien, że wiesz już wszystko, prawdopodobnie nie nauczysz się niczego nowego. A jeśli jesteś pewien, że wiesz, jak zrobić wszystko, nie będziesz się uczyć. Taka myśl nawet nie przyjdzie ci do głowy. A to oznacza, że ​​przegapisz wszystkie wspaniałe okazje do nauczenia się czegoś. Zwykły college daje ci tylko wiedzę; będziesz musiał samodzielnie zdobywać umiejętności. Ale co słyszę? Miałeś praktykę poza teorią na swojej uczelni? Ok, jeśli studiowałeś na wydziale fizykiwykonaj działający model silnika parowego o sprawności co najmniej 20%. Założę się, że wiesz, jak to zrobić, ale tak naprawdę nie będziesz w stanie tego zrobić, prawda? Jesteś chemikiem ? Zrób bezdymny proszek. Wiesz jak, ale nie możesz, ha? Matematyk, jesteś? Oblicz trajektorię pocisku artyleryjskiego. Nie zapomnij wziąć pod uwagę kształtu muszli. Matematyczne kropki nie latają w prawdziwym życiu. I nie ma kulistych koni. Stary poziom 09 - 2Biolog? Wyizolować penicylinę. Ta pleśń rośnie na melonach, więc wiesz. Wiecie jak – cudownie! Możesz to zrobić? Ekonomista?Sporządź prognozę wzrostu cen ropy naftowej. Zrobione? A teraz zamień je na 2 000 lub 200 000 USD rocznie w oparciu o swoją prognozę. Grałeś kiedyś na FOREX? Za prawdziwe pieniądze? Albo po prostu wiesz, co to jest? Międzynarodowa ekonomia? Znakomity! Gdzie mogę otworzyć spółkę offshore? W Hongkongu, Irlandii lub w USA. Dlaczego? Nawet jeśli to wiesz, co jest wątpliwe, raczej nie będziesz w stanie tego zrobić, ponieważ nigdy tego nie zrobiłeś. Nie masz nawet najmniejszego pojęcia, jak to zrobić. Och, nie uczyłeś się tego na studiach? Jakie mam prawo dawać ci zadania, do których nie jesteś przygotowany? Bo to są zadania prawdziwego życia. To JEST praktyka , wszystko, czego uczyłeś się na studiach, to: kuliste konie, doskonała konkurencja – nic z tego nie istnieje w prawdziwym życiu. Ale dlaczego zapomniałem wspomniećspecjalista od marketingu ? Jak najlepiej wydać moje 500 dolarów, aby jak najwięcej osób dowiedziało się o moich wykładach? Na reklamie? Czy zdajesz sobie sprawę, że nie tylko klasyczna reklama jest już przestarzała, ale także koncepcja USP (unique selling proposition), której na pewno uczono cię na studiach jako niemalże wyjątkowe panaceum. Zapomnij, że cokolwiek wiesz. Zadaj sobie pytanie – co mogę zrobić? Przydatne, mam na myśli? Coś, za co ludzie zapłaciliby pieniądze? Dobre pieniądze, znaczy? Tak więc przyjaciele, wyraźmy wdzięczność za tak wspaniały kurs, jakim jest CodeGym. Dzięki niemu nie tylko nauczysz się programować, ale faktycznie będziesz w stanie to zrobić. Za kilka lat też będziesz mógł znaleźć pracę i dobrze zarabiać. Mam nadzieję, że te pieniądze wystarczą na miłe i przytulne życie. Powiem to jeszcze raz, żebyście zapamiętali: nieważne, co wiecie. Liczy się tylko to, jakie posiadasz przydatne umiejętności, za które ludzie byliby skłonni zapłacić. Im szybciej to zrozumiesz, tym lepiej.

Osiągnąłeś nowy poziom

Poziom 9

Stary poziom 09 - 3

1 Risha, ślad stosu

Stary poziom 09 - 4- Hej! Dzisiaj powiem ci, czym jest ślad stosu. Ale najpierw pozwól mi wyjaśnić, czym jest stos. - Wyobraź sobie stos papierów - zadania dla pewnego urzędnika. Nowe zadanie można umieścić na wierzchu stosu, a on weźmie zadanie z wierzchu stosu. W związku z tym zadania nie będą wykonywane na zasadzie „kto pierwszy, ten lepszy”. Za każdym razem, gdy urzędnik bierze zadanie, które jest ostatnie. Taka struktura kolekcji nazywana jest stosem . - W Javie istnieje specjalna kolekcja - Stack. Ta kolekcja ma metody „dodaj element” i „weź (pobierz/zabierz) element”. Jak już wiesz, ostatni dodany element zostanie wzięty jako pierwszy. - Hum. To chyba nie jest trudne. - Cienki. Następnie pozwól mi wyjaśnić, co to jest ślad stosuJest. - Wyobraźmy sobie, że w Javie funkcja A wywołuje funkcję B , a ta ostatnia wywołuje funkcję C , która z kolei wywołuje funkcję D . Tak więc, aby wyjść z funkcji B , musisz najpierw wyjść z funkcji C , a aby to zrobić, musisz wyjść z funkcji D . Jest to bardzo podobne do stosu. - A jakie jest podobieństwo? - W stosie, aby dostać się do określonego zadania, musisz również wykonać wszystkie zadania umieszczone na wierzchu. - No, to trochę analogia, ale nie jestem pewien, czy dobrze wszystko rozumiem. - Popatrz tutaj. W Javie stos to zbiór elementów. To jak arkusze papieru w stosie. Aby wziąć trzeci od góry, musisz wziąć drugi arkusz, ale wcześniej musisz wziąć pierwszy. Zawsze możesz włożyć i wyjąć prześcieradła, ale możesz je kłaść tylko na wierzchu i zdejmować tylko z góry. To samo dotyczy wywołania funkcji. Funkcja A wywołuje funkcję B , ta ostatnia wywołuje funkcję C. Aby wyjść z A , musisz najpierw wyjść z B , a żeby to zrobić, musisz wyjść z C. - Poczekaj minutę. Jeśli dobrze zrozumiałem, cały stos okazuje się „tylko ostatni arkusz, który został umieszczony na stosie, może zostać pobrany” i „najpierw ostatnia wywołana funkcja powinna wyjść”. Czy tak jest? - Tak. Tak więc sekwencja wywołań funkcji to „stos wywołań funkcji” lub po prostu „stos wywołań”. Funkcja wywołana jako ostatnia musi zostać zakończona jako pierwsza. Spójrzmy na przykład: Stary poziom 09 - 5- OK. Wydaje mi się, że wszystko jest jasne dzięki wywołaniu funkcji. Ale co to jest StackTraceElement ? - Wirtualna maszyna Java rejestruje wszystkie wywołania funkcji. W tym celu posiada specjalną kolekcję – stos. Kiedy jedna funkcja wywołuje inną, JVM umieszcza nowy element StackTraceElement na tym stosie. Po zakończeniu funkcji element jest usuwany ze stosu. W ten sposób stos ten zawsze przechowuje aktualne informacje o bieżącym stanie „stosu wywołań funkcji”. - Każdy element StackTracezawiera informacje o wywołanej metodzie. Możesz więc uzyskać nazwę tej metody za pomocą metody getMethodName . - Pokazuje to powyższy przykład:
  1. Uzyskaj „stos wywołań”:
  2. Iteruj tablicę za pomocą pętli for-each . Mam nadzieję, że o tym nie zapomniałeś.
  3. Wydrukuj nazwy metod do System.out .
- Ciekawa rzecz i pozornie łatwa. Dziękuję, Risza!

2 Diego, Zadanie na wyświetlaczu śledzenia stosu

- Hej, Amigo! Oto małe zadanie, aby wyświetlić na ekranie ślad stosu.
Zadania
1 Każda metoda powinna zwrócić swój StackTrace
Napisz pięć metod, które wywołują się nawzajem. Każda metoda powinna zwracać swój StackTrace.
2 StackTrace ponownie
Napisz pięć metod, które wywołują się nawzajem. Każda metoda powinna zwracać nazwę swojej metody wywołującej. Możesz uzyskać metodę dzwoniącego za pomocą StackTrace.
3 Metoda powinna zwrócić numer wiersza kodu, z którego wywołano tę metodę.
Napisz pięć metod, które wywołują się nawzajem. Każda metoda powinna zwrócić numer linii kodu, z którego została wywołana. Użyj funkcji element.getLineNumber() .
4 Ślad stosu 10 wywołań
Napisz kod, aby uzyskać ślad stosu 10 wywołań.
5 Metoda powinna zwrócić wynik - głębokość śledzenia stosu
Napisz metodę, która wyświetla i zwraca głębokość śledzenia stosu. Głębokość śledzenia stosu to liczba jego metod (liczba elementów na liście).

3 Elly, Błędy i wyjątki

- Hej, Amigo! Dzisiaj mamy bardzo ciekawą lekcję. Opowiem o wyjątkach. Wyjątek to specjalny mechanizm kontroli błędów w programie. Oto kilka przykładów błędów, które mogą wystąpić w programie:
  1. Program próbuje zapisać plik na pełnym dysku.
  2. Program próbuje wywołać metodę zmiennej, która przechowuje odwołanie o wartości null.
  3. Program próbuje podzielić liczbę przez 0.
Te działania powodują błąd. Zwykle prowadzi to do zamknięcia programu – dalsze wykonywanie kodu nie ma sensu. - Dlaczego? - Czy jest sens kręcić kierownicą, gdy samochód spada z urwiska? - Masz na myśli, że program powinien się zakończyć? - Tak. Tak było wcześniej. Każdy błąd prowadził do zakończenia programu. - To bardzo mądra decyzja. - Czy nie lepiej byłoby spróbować popracować? - Tak. Wpisałeś ogromny tekst w MS Word, zapisałeś go, nie został zapisany, ale program mówi ci, że wszystko jest w porządku. I dalej piszesz. Głupie, prawda? - Tak. - Wtedy programiści wymyślili ciekawy ruch:każda funkcja zwracała status swojej pracy. 0 oznaczało, że funkcja zadziałała tak, jak powinna, każda inna wartość – że wystąpił błąd : ta wartość była kodem błędu. - Ale to podejście miało wadę. Po każdym (!) wywołaniu funkcji trzeba było sprawdzić kod (liczbę) zwrócony przez funkcję. Po pierwsze, było to niewygodne: kod obsługujący błędy był rzadko wykonywany, ale zawsze trzeba go było napisać. Po drugie, same funkcje często zwracają różne wartości – co z nimi zrobić? - Tak. O to chciałem zapytać. - Potem nadeszła świetlana przyszłość - pojawiły się wyjątki i obsługa błędów. Oto jak to działa:
  1. Gdy wystąpi błąd, wirtualna maszyna Java tworzy specjalny obiekt – wyjątek – zawierający wszystkie informacje o błędzie. Dla różnych błędów istnieją różne wyjątki.
  2. Następnie ten wyjątek zmusza program do natychmiastowego przerwania bieżącej funkcji i następnej funkcji, aż do wyjścia z głównej metody. Po tym program się kończy. Programiści Javy nazywają ten proces „cofnięciem stosu wywołań”.
- Ale powiedziałeś, że program na pewno się nie zakończy. - Zgadza się, ponieważ istnieje sposób na złapanie wyjątku. Zawsze i wszędzie możesz napisać specjalny kod, który wyłapie te wyjątki i zrobi coś ważnego. - Aby to zrobić, istnieje specjalna konstrukcja try-catch . Zobacz, jak to działa: Stary poziom 09 - 6- Dlaczego «Po wywołaniu metody 1. Nigdy nie zostanie pokazany» nie zostanie wyświetlony na ekranie? - Cieszę się, że o to zapytałeś. W linii 25 jest dzielenie przez zero. Prowadzi to do błędu – wyjątku. Wirtualna maszyna Java utworzyła obiekt ArithmeticException zawierający informacje o błędzie. Ten obiekt jest wyjątkiem. - Wystąpił wyjątek wewnątrz metody method1() .Spowodowało to natychmiastowe zakończenie metody. Doprowadziłoby to również do zakończenia metody main , gdyby nie było bloku try-catch . - Jeśli wyjątek wystąpi w bloku try, zostanie przechwycony w bloku catch . Reszta kodu w bloku try nie zostanie wykonana, wykonanie bloku catch rozpocznie się natychmiast. - Nie do końca rozumiem. - Innymi słowy, ten kod działa tak:
  1. Jeśli w bloku try wystąpi wyjątek , kod w tym bloku nie jest już wykonywany, ale rozpoczyna się wykonywanie bloku catch .
  2. Jeśli nie wystąpił żaden wyjątek, blok try jest wykonywany do końca , a catch nigdy nie jest wykonywany .
- Ech! - Wyobraź sobie, że po każdym wywołaniu metody sprawdzamy, czy wywołana metoda zakończyła się sama, czy z powodu wyjątku. Jeśli wystąpił wyjątek, JVM rozpoczyna wykonywanie przechwytywania bloku, jeśli jest dostępne, i przechwytuje wyjątek. Jeśli nie ma bloku catch, JVM kończy bieżącą metodę. Następnie to samo sprawdzenie rozpoczyna się w metodzie, która wywołała bieżącą metodę. - Teraz myślę, że to rozumiem. - W porządku. - A co to jest ten wyjątek w bloku catch? - Wszystkie wyjątki są klasami odziedziczonymi po klasie Exception. Możemy złapać dowolny z nich, określając jego klasę w haczykubloku lub wszystkie naraz, określając wspólny wyjątek klasy nadrzędnej. Następnie ze zmiennej e (ta zmienna przechowuje odniesienie do obiektu wyjątku) można uzyskać wszystkie niezbędne informacje o błędzie. - Świetnie! A jeśli w mojej metodzie wystąpią różne wyjątki, czy mogę sobie z nimi poradzić na różne sposoby? - Musisz. Możesz to zrobić w następujący sposób: Stary poziom 09 - 7- Blok try może zawierać wiele bloków catch , z których każdy będzie przechwytywał wyjątki swojego typu. - Umph. Cóż, poniekąd to mam. Oczywiście sam czegoś takiego nie napiszę. Jednak nie przestraszę się, jeśli spotkam taki kod.

4 Elly, RuntimeException, wyrzuca

Stary poziom 09 - 8- Postanowiłem poruszyć dzisiaj inny temat. W Javie wszystkie wyjątki są podzielone na dwa typy – kontrolowane/sprawdzone i niekontrolowane/niezaznaczone . Zaznaczone wyjątki muszą zostać przechwycone, niezaznaczone można przechwycić, ale nie jest to wymagane . - Czy można celowo rzucać wyjątki w kodzie? - W swoim kodzie możesz samodzielnie rzucać wyjątki. Możesz nawet napisać własne wyjątki. Ale później zagłębimy się w tę dziurę. Teraz nauczmy się pracować z wyjątkami zgłaszanymi przez wirtualną maszynę Java. - OK. - Jeśli wyjątki ClassNotFoundException i FileNotFoundExceptionsą wyrzucane (pojawiają się) w metodzie, programista musi je określić w sygnaturze metody (nagłówku metody). Takie wyjątki są sprawdzane. Tak to zwykle wygląda: Stary poziom 09 - 9- Więc po prostu piszemy rzuty i wypisujemy wyjątki oddzielone przecinkami. Prawidłowy? Czy tak jest? - Tak. Ale jest jeszcze jedna ciekawa rzecz. Aby poniższy przykład został skompilowany, metoda wywołująca method1() musi przechwycić te wyjątki lub odrzucić je dalej. Jeśli chcesz rzucić sprawdzony wyjątek dalej, musisz określić go w nagłówku metody . - Ponownie, jeśli w metodzie main chcesz wywołać metodę, która ma w nagłówku frazę throws FileNotFoundException, …następnie musisz zrobić jedną z tych dwóch rzeczy:
  1. aby wychwycić wyjątki FileNotFoundException, …
    Będziesz musiał owinąć kod, w którym wywołujesz niebezpieczną metodę, blokiem try -catch
  2. aby nie przechwytywać wyjątków FileNotFoundException, …
Będziesz musiał dodać te wyjątki do listy rzutów swojej metody main . - Podasz mi przykład? - Spójrz tutaj: Stary poziom 09 - 10- Ten przykład nie zostanie skompilowany, ponieważ metoda main wywołuje metodę method1(), która zgłasza wyjątki, które muszą zostać przechwycone. - Aby przykład został skompilowany, musisz dodać obsługę wyjątków do metody main . Można to zrobić na dwa sposoby: Stary poziom 09 - 11- ​​A tutaj łapiemy to za pomocą try-catch : Stary poziom 09 - 12- Robi się coraz wyraźniej, ale bardzo mało. - Spójrz na poniższy przykład: Stary poziom 09 - 13- Wciąż jest wyjątek – RuntimeException i dziedziczone z niego klasy.Nie jest wymagane ich łapanie ani rzucanie. To są niesprawdzone wyjątki. Te wyjątki są uważane za trudne do przewidzenia, więc przewidzenie ich wystąpienia jest prawie niemożliwe. Możesz zrobić z nimi te same rzeczy, ale nie ma potrzeby określania ich w throws .

5 Risha, Rolling the call stack, jak to zrobić w wyjątkach

- Chciałbym opowiedzieć trochę więcej o tym, jak działają wyjątki. Poniższy przykład wyjaśnia, że: Stary poziom 09 - 14- Nie rozumiem. - OK. Wyjaśnię, o co chodzi. - W przykładzie po lewej stronie wywołujemy kilka metod w kolejności łańcuchowej. W metodzie method2() specjalnie tworzymy i zgłaszamy wyjątek (aby zainicjować błąd). - Przykład po prawej pokazuje, co się dzieje. Spójrz na metodę2() . Na tym polega tworzenie wyjątku: tworzymy obiekt typu RuntimeException , zapisujemy go w specjalnej zmiennej wyjątku i natychmiast wychodzimy z metody – return . - W metodzie 1 po wywołaniu metody 2 następuje sprawdzenie,czy istnieje wyjątek, czy nie; jeśli wystąpi wyjątek, metoda 1 natychmiast się kończy. To sprawdzenie odbywa się niejawnie po wywołaniu każdej (!) metody Java. - Wow! - Dokładnie. - W kolumnie po prawej w metodzie main napisałem co się dzieje, gdy wyjątek zostanie złapany przez blok try-catch . Jeśli nie było wyjątku, kod jest kontynuowany zgodnie z planem. Jeśli wystąpił wyjątek typu określonego w catch , to go obsłużymy. - A co oznaczają throw i instanceof ? - Spójrz na ostatnią linię po lewej stronie, wyrzuć nowe RuntimeException(s). W ten sposób tworzymy i rzucamy wyjątek. To tylko przykład. Na razie tego nie zrobimy. - Za pomocą polecenia « а instanceof B » w prawym bloku sprawdzamy, czy obiekt a ma typ B . Oznacza to, czy obiekt przechowywany w zmiennej wyjątek ma typ RuntimeException . To logiczne wyrażenie. - No, trochę się rozjaśnia.

6 Diego, Zadanie wyłapywania wyjątków

- Popatrz tutaj! Wujek Diego przywiózł dla ciebie kilka zadań związanych z łapaniem. Życzę powodzenia. Myślę, że będziesz go potrzebować. Heh. Stary poziom 09 - 15- Hej, Amigo! Oto kilka interesujących zadań przechwytywania wyjątków.
Łapanie zadań
1 1. Wyjątek podczas operacji z liczbami
Wyłap wyjątek, który pojawia się podczas uruchamiania kodu:
int a = 42 / 0;
Wyświetl wyjątek na ekranie, określając jego typ
2 2. Wyjątek podczas operacji na łańcuchach
Łap wyjątek, który pojawia się podczas uruchamiania kodu:
String s = null;
String m = s.toLowerCase();
Wyświetl wyjątek na ekranie, określając jego typ.
3 3. Wyjątek podczas pracy z tablicami
Przechwyć wyjątek, który pojawia się podczas uruchamiania kodu:
int[] m = new int[2];
m[8] = 5;
Wyświetl wyjątek na ekranie, określając jego typ.
4 4. Wyjątek podczas pracy z kolekcjami List
Przechwyć wyjątek, który pojawia się po uruchomieniu kodu:
ArrayList<String> list = new ArrayList<String>();
Ciąg s = lista.get(18);
Wyświetl wyjątek na ekranie, określając jego typ.
5 5. Wyjątek podczas pracy z kolekcjami Map
Złap wyjątek, który pojawia się podczas uruchamiania kodu:
HashMap<String, String> map = new HashMap<String, String>(null);
map.put(null, null);
map.remove(null);
Wyświetl wyjątek na ekranie, określając jego typ.
- Wskazówka: najpierw napisz program, potem zobacz, jaki wyjątek wystąpi, a potem zmień kod i złap ten wyjątek.

7 Risha, Jak działa wiele połowów

Stary poziom 09 - 16- A teraz trochę ciekawszych wykładów. Tak bardzo lubię uczyć. - Chcę ci powiedzieć, jak działa wielokrotny haczyk . W rzeczywistości jest to bardzo proste: gdy w bloku try wystąpi wyjątek , wykonanie programu zostanie przeniesione do pierwszego bloku catch . - Jeśli typ określony w nawiasach bloku catch jest taki sam jak typ obiektu-wyjątku, wówczas wykonywanie kodu rozpoczyna się wewnątrz {}. W przeciwnym razie przechodzimy do następnego połowu . Tam kontrola jest powtarzana. - Jeśli nie ma więcej bloków catch , ale wyjątek nie został przechwycony, jest odrzucany do przodu, a bieżąca metoda jest przerywana. - Widzę. Ten połów zostanie wykonany, którego typ odpowiada typowi wyjątku. - Tak, racja. Właściwie jest to nieco bardziej skomplikowane: chodzi o to, że klasy mogą być dziedziczone po sobie. Jeżeli klasa «Krowa» jest dziedziczona z klasy «Zwierzę», obiekt typu «Krowa» może być przechowywany nie tylko w zmiennej typu «Krowa», ale także w zmiennej typu «Zwierzę» . - Więc co? - Ponieważ wszystkie wyjątki są dziedziczone z klas Exception lub RuntimeException (która jest również dziedziczona z Exception ), wszystkie mogą zostać przechwycone za pomocą poleceń catch (Exception e) lub catch (RuntimeException e) . - Więc co? - To znaczy że,po pierwsze, możesz przechwycić dowolny wyjątek za pomocą polecenia catch(Exception e) . Po drugie, kolejność bloków catch ma znaczenie. Przykłady: - Wyjątek ArithmeticException wynikający z dzielenia przez 0 zostaje złapany w drugim haczyku. Stary poziom 09 - 17- W poniższym przykładzie wyjątek ArithmeticException jest przechwytywany w pierwszym catch , ponieważ klasy wszystkich wyjątków są dziedziczone z wyjątku. Tak więc wyjątek przechwytuje każdy wyjątek . Stary poziom 09 - 18- W poniższym przykładzie wyjątek ArithmeticException nie jest przechwytywany, ale przekazywany dalej do metody wywołującej. Stary poziom 09 - 19- Cóż, teraz jest coraz jaśniej. Te wyjątki nie są takie proste. - Tylko tak się wydaje. W rzeczywistości jest to jedna z najprostszych rzeczy w Javie. - Wątpię, czy się z tego cieszyć, czy denerwować…

8 Diego, Wiele zadań przechwytywania wyjątków

- Hej, Amigo! Wczoraj upiłem się i za bardzo skomplikowałem Ci zadania, ale mam nadzieję, że nie masz urazy z Twojej strony i rozwiążesz je wszystkie? To dla twojego dobra. Tutaj:
Zadania
1 1. Wyjątki
Istnieje metoda, która zgłasza dwa wyjątki odziedziczone po wyjątku , a dwa pozostałe po wyjątku RuntimeException : NullPointerException , ArithmeticException , FileNotFoundException i URISyntaxException .

Musisz przechwycić NullPointerException i FileNotFoundException , ale nie przechwytywać ArithmeticException i URISyntaxException . Jak to zrobić?
2 2. Łapanie wyjątków
Istnieją trzy wyjątki dziedziczone sekwencyjnie z wyjątku :
klasa Wyjątek1 rozszerza wyjątek
klasa Wyjątek2 rozszerza wyjątek1
klasa Wyjątek3 rozszerza Wyjątek2
Istnieje metoda, która jest opisana następująco:
public static void metoda1() rzuca wyjątek1, wyjątek2, wyjątek3

Napisz haczyk block, aby złapać wszystkie trzy wyjątki1 , wyjątek2 i wyjątek3
3 3. Łapanie selektywnych wyjątków
1. Dowiedz się, jakie wyjątki są zgłaszane przez metodę BEAN.methodThrowExceptions .
2. Metoda processExceptions() powinna wywoływać metodę BEAN.methodThrowExceptions i obsługiwać wyjątki:
2.1. jeśli wystąpi wyjątek FileSystemException , zarejestruj go, wywołując metodę BEAN.log i wyrzuć do przodu
2.2. jeśli wystąpi wyjątek CharConversionException lub jakikolwiek inny wyjątek IOException , po prostu zaloguj go, wywołując metodę BEAN.log
3. Dodaj klasę/typ wyjątku, który przekazujesz w 2.1. do procesuWyjątki()sygnatura metody.
4. Obsłuż pozostały wyjątek w metodzie main() i zarejestruj go. Użyj try..catch

Wskazówka:
Jeśli przechwyciłeś wyjątek MyException , którego nie chciałeś złapać, możesz go rzucić dalej, używając następującego kodu:
catch (MyException e) {
throw e;
}
4 4. Wychwytywanie sprawdzonych wyjątków
Obsługuj wszystkie sprawdzone wyjątki w metodzie processExceptions() .
Musisz wyświetlić na ekranie każdy sprawdzony wyjątek, który wystąpił.
Możesz użyć tylko jednej próby bloku .
5 5. Wychwytywanie niesprawdzonych wyjątków
Obsługuj wszystkie niesprawdzone wyjątki w metodzie processExceptions() .
Musisz wyświetlić na ekranie ślad stosu każdego występującego wyjątku za pomocą metody printStack() .
Możesz użyć tylko jednej próby bloku .

9 Profesor, Wykład o wyjątkach

- Dziś mamy super ciekawy temat - wyjątki. W czasach, gdy młodzi naukowcy i programiści byli bardzo podekscytowani tym tematem… - Przepraszam, muszę iść do laboratorium. Oto notatki z wykładów. Myślę, że sam się domyślisz. Tutaj: Wyjątki Java (dokumentacja Oracle) Obsługa wyjątków w Javie (punkt T Java) Java - Obsługa wyjątków (punkt samouczków) Podstawowa obsługa wyjątków Java

10 lipca

- Amigo, co myślisz o dzisiejszej lekcji? Czy twój mózg pozytronowy jeszcze się nie wypracował? Zadania Diego wystarczą, by zmęczyć każdego. Wypijmy chwilę przy piwie i zrelaksujmy się. Czy nadal stoisz?

11 kapitanów wiewiórek

- Cześć, żołnierzu! - Dzień dobry panu! - Mam dla ciebie wspaniałe wieści. Oto szybkie sprawdzenie, aby wzmocnić swoje umiejętności. Rób to codziennie, a szybko poprawisz swoje umiejętności. Zadania są specjalnie zaprojektowane do wykonywania w Intellij IDEA.
Dodatkowe zadania do wykonania w Intellij Idea
1 1. Dzielenie przez zero
Utwórz metodę public static void dzielenieByZero() , w której musisz podzielić dowolną liczbę przez zero i wyświetlić na ekranie wynik dzielenia.
Zawiń wywołanie metody DivisionByZero() w try..catch . Wyświetl na ekranie ślad stosu wyjątków za pomocą metody Exception.printStackTrace() .
2 2. Odliczanie od 10 do 0
Napisz pętlę do odliczania od 10 do 0. Użyj Thread.sleep(100) , aby opóźnić;
Zawiń wywołanie uśpienia w try..catch .
3 3. Zawiń metodę w try..catch
Odczytaj liczby z klawiatury. Napisz kod do wczytywania liczb z klawiatury do osobnej metody readData() .
Zawiń całe ciało tej metody (cały kod wewnątrz metody readData() , z wyjątkiem deklaracji listy, na której będą przechowywane liczby) w try..catch .

Jeśli użytkownik wprowadzi tekst zamiast liczby, metoda musi wychwycić wyjątek i wyświetlić na ekranie wszystkie wprowadzone wcześniej liczby.
Wyświetlanie liczb na ekranie. Każda liczba powinna znajdować się w nowej linii. Kolejność liczb powinna być taka sama jak na wejściu.
4 4. Konwerter daty
Odczytaj z klawiatury datę w formacie «08/18/2013»
Wyświetl na ekranie tę datę w postaci «18 sierpnia 2013».
Użyj obiektów Date i SimpleDateFormat .
5 5. Samogłoski i spółgłoski
Napisz program, który czyta wiersz z klawiatury.
Program powinien wyświetlić na ekranie dwa ciągi:
1) pierwszy ciąg powinien zawierać samogłoski
2) drugi ciąg powinien zawierać spółgłoski i znaki interpunkcyjne z wprowadzonego tekstu.
Oddziel znaki spacjami.

Przykładowe dane wejściowe:
Stop, patrz, słuchaj.
Przykładowe dane wyjściowe:
oooie
stplklstn
6 6. Bajka o Czerwonym Kapturku
1. Istnieje pięć klas: Czerwony Kapturek, babcia, kotlet, drwal, wilk.
2. Każda klasa ma dwa pola typu ArrayList : zabity i zjedzony.
3. Niezbędne obiekty są już utworzone (kaptur, babcia, ...).
4. Stwórz prawidłową relację (kto zjadł i kogo zabił), aby uzyskać logikę „Czerwonego Kapturka”.
7 7. Przenieś modyfikacje statyczne
Przenieś modyfikatory statyczne, aby kod się skompilował.
8 8. Lista tablic liczb
Stwórz listę, której elementami są tablice liczb. Dodaj do listy pięć tablic obiektów o długości odpowiednio 5, 2, 4, 7, 0. Wypełnij tablice dowolnymi danymi i wyświetl je na ekranie.
9 9. Dziesięć kotów
Utwórz klasę Kot z polem Nazwa ciągu .
Utwórz słownik Map<String, Cat> , dodaj 10 kotów na modelu «Imię» - «Kot».
Pobierz z mapy zestaw nazw i wyświetl zestaw na ekranie.
- Te zadania były dla zielonych. Dodałem dodatkowe zadania o większej złożoności. Tylko dla najlepszych dział.
Zadania bonusowe
1 1. Program nie kompiluje się i nie uruchamia. Napraw to.
Zadanie: Program powinien odczytać z klawiatury dwie nazwy plików i skopiować pierwszy plik do miejsca wskazanego przez drugą nazwę.
2 2. Dodaj nową funkcjonalność do programu.
Stare zadanie: Program powinien odczytać z klawiatury dwie nazwy plików i skopiować pierwszy plik do lokalizacji określonej przez drugą nazwę.
Nowe zadanie: Program powinien odczytać z klawiatury dwie nazwy plików i skopiować pierwszy plik do miejsca wskazanego przez drugą nazwę.

Jeżeli plik (który ma zostać skopiowany) o podanej nazwie nie istnieje, program powinien wyświetlić na ekranie komunikat „Plik nie istnieje” i przed odczytaniem nazwa drugiego (docelowego) pliku.
3 3. Uczenie się i ćwiczenie algorytmu.
Przeczytaj z klawiatury listę słów i liczb. Wyświetlaj na ekranie słowa w porządku rosnącym i liczby w porządku malejącym.

Przykładowe dane wejściowe:
Wiśnia
1
Fasola
3
Jabłko
2
0
Arbuz

Przykładowe dane wyjściowe:
Jabłko
3
Fasola
2
Wiśnia
1
0
Arbuz
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION