Pomoc dla laika - wyjątki oraz try catch

0

Witam, jestem kompletnym laikiem w programowaniu, ale bardzo pragnę zdobyć wiedzę, którą będę mógł wykorzystać w przyszłości, więc zacząłem swoją przygodę z Java. Przerabiam kurs na stronie javastart oraz The New Boston. Mam problem ze zrozumieniem metody try catch oraz nie mogę znaleźć listy wyjątków instrukcji throw.

Czego nie rozumiem z try catch?
http://javastart.pl/programowanie-obiektowe/wyjatki-blok-try-catch/
Pojawia się tutaj wiele rzeczy, których wcześniej nie było w kursie...

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

BufferedReader To pojawia się zamiast Scannera, nie rozumiem w jakim wypadku się używa tego czy tego.

Dalsza część kodu:
BufferedReader odczyt = new BufferedReader(new InputStreamReader(System.in));
Dlaczego w nawiasie jest InputStreamReader

boolean czyPoprawne = false;

Tego również wcześniej nie było...

while(!czyPoprawne)
Co tutaj oznacza wykrzyknik?

Nie rozumiem również tego...

try { 
index = Integer.parseInt(odczyt.readLine()); }
catch (NumberFormatException n) { System.out.println("Niepoprawne dane! " + "\n Który element tablicy chcesz zobaczyć: "); }
catch (IOException e) { System.out.println("Błąd odczytu danych"); }
0

Znaczy nie rozumiesz nic? o_O To może jednak coś na ten temat przeczytaj? :D
importy to importy, klasy których będziesz używał
ten taki kaskadowy konstruktor new BufferedReader(new InputStreamReader(System.in)); to tzw dekorator. InputStreamReader pozwala na czytanie danych ze strumienia. BufferedReader dodaje do tego funkcjonalność czytania buforowanego (tzn czyta paczkami danych).
Z tym booleanem to mam nadzieje że żart.
Wykrzyknik to negacja, czyli pętla wykonuje się dopóki czyPoprawne jest ustawione na false (bo negacja false to true)
Czego nie rozumiesz w ostatnim bloku? Czytasz linię z pliku, parsujesz ją jako liczbę. Takie parsowanie może nie zadziałać jeśli wczytałeś z pliku coś innego niż liczbe i wtedy leci wyjątek NumberFormatException. Poza tym samo czytanie z pliku może nie zadziałać bo pliku może nie być, wtedy leci IOException.
Jeśli lecą takie wyjątki to trzeba je obsłużyć przez try a potem ich łapanie.

0
Shalom napisał(a):

Znaczy nie rozumiesz nic? o_O To może jednak coś na ten temat przeczytaj? :D
importy to importy, klasy których będziesz używał
ten taki kaskadowy konstruktor new BufferedReader(new InputStreamReader(System.in)); to tzw dekorator. InputStreamReader pozwala na czytanie danych ze strumienia. BufferedReader dodaje do tego funkcjonalność czytania buforowanego (tzn czyta paczkami danych).
Z tym booleanem to mam nadzieje że żart.
Wykrzyknik to negacja, czyli pętla wykonuje się dopóki czyPoprawne jest ustawione na false (bo negacja false to true)
Czego nie rozumiesz w ostatnim bloku? Czytasz linię z pliku, parsujesz ją jako liczbę. Takie parsowanie może nie zadziałać jeśli wczytałeś z pliku coś innego niż liczbe i wtedy leci wyjątek NumberFormatException. Poza tym samo czytanie z pliku może nie zadziałać bo pliku może nie być, wtedy leci IOException.
Jeśli lecą takie wyjątki to trzeba je obsłużyć przez try a potem ich łapanie.

No właśnie czytam i nie rozumiem, dlatego zwróciłem się o pomoc :).

Rozumiem czym są importy, tylko nie rozumiem na czym polegają te konkretne, ponieważ wcześniej ich nie było w kursie, z którego się uczę. Kiedy używa się BufferedReader a kiedy Scanner?

Gdzie znajdę listę wyjątków? Z nią na pewno będzie mi łatwiej zrozumieć program.

0
Merol napisał(a):

Rozumiem czym są importy, tylko nie rozumiem na czym polegają te konkretne, ponieważ wcześniej ich nie było w kursie, z którego się uczę. Kiedy używa się BufferedReader a kiedy Scanner?

Gdzie znajdę listę wyjątków? Z nią na pewno będzie mi łatwiej zrozumieć program.

"Te konkretne" importy które przytoczyłeś polegają na załadowaniu do użytku konkretnych klas z pakietu wejścia/wyjście czyli java.io. Można załadować na raz cały pakiet (czyli wszystkie jego podpakiety i klasy) za pomocą znaku gwiazdki *. W rozpatrywanym przypadku będzie to:
java.io.*;
Bez załadowania do przestrzeni nazw musiałbyś w programie za każdym razem podawać pełną ścieżkę dostępu do klasy np:
new java.io.ImputStreamReader(System.in)

Klasy Scanner i BufferedReader mają różne funkcje. BufferedReader to obiekt magazynujący przychodzące znaki, tak aby nie było konieczności wywoływania za każdym razem docelowego urządzenia fizycznego. Bez niego trzeba by po każdym znaku (np. literze) dokonywać, dajmy na to, zapisu na dysku, a tak - wywołanie następuje dopiero po zapełnieniu bufora.
Klasa Scanner natomiast odczytuje sformatowane dane wejściowe (także z konsoli) i konwertuje je do postaci binarnej. Ma naprawdę masę zastosowań.

Wyjątki są zawsze opisane przy dokumentacji metody. Stworzenie listy wyjątków byłoby bez sensu, bo wyjątki są unikalne dla metod, w zależności od tego co te metody robią.

Obczaj ten kurs. Sam korzystałem tylko z drugiej części, ale może i podstawa nie będzie gorsza
http://edu.pjwstk.edu.pl/wyklady/ppj/scb/index.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1