У овом упутству научићемо да користимо кључну реч тхров анд тхровс за руковање изузецима уз помоћ примера.
У Јави се изузеци могу сврстати у два типа:
- Не проверавају Изузеци: Они нису проверени у време компајлирања, али на води-тиме.Фор пример:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, изузеци подError
класе, итд - Проверени изузеци: Проверавају се током компајлирања. На пример,
IOException
,InterruptedException
, етц.
Погледајте Јава изузетке да бисте детаљно сазнали о потврђеним и непровереним изузецима.
Обично не треба да радимо са непровереним изузецима. То је зато што се непроверени изузеци јављају због програмских грешака. И добра је пракса да се исправљају уместо да се њима рукује.
Ово упутство ће се сада усредсредити на то како поступати са провереним изузецима помоћу throw
и throws
.
Јава баца кључну реч
Користимо throws
кључну реч у декларацији методе да бисмо декларисали врсту изузетака који би се могли појавити у њој.
Његова синтакса је:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Као што видите из горње синтаксе, можемо користити throws
за пријављивање вишеструких изузетака.
Пример 1: Јава баца кључну реч
import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) )
Оутпут
јава.ио.ФилеНотФоундЕкцептион: тест.ткт (Нема такве датотеке или директоријума)
Када покренемо овај програм, ако датотека test.txt
не постоји, FileInputStream
баца а FileNotFoundException
која проширује IOException
класу.
Ако се метода не бави изузецима, врста изузетака који се могу појавити у њој мора бити наведена у throws
клаузули, тако да методе даље у стеку позива могу да их обраде или специфицирају помоћу throws
саме кључне речи.
findFile()
Метод наводи да је IOException
могао да буде. main()
Метод позива овај метод и обрађује изузетак ако је бачен.
Бацање вишеструких изузетака
Ево како можемо да бацимо вишеструке изузетке помоћу throws
кључне речи.
import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) )
Овде је findFile()
метод наводи да се може бацити NullPointerException
, IOException
и InvalidClassException
у својој throws
клаузуле.
Имајте на уму да нисмо обрађивали NullPointerException
. То је зато што је то непроверени изузетак. Није потребно то навести у throws
клаузули и руковати њиме.
баца кључну реч вс. покушај … ухвати … коначно
Можда постоји неколико метода које могу изазвати изузетке. Писање try… catch
за сваку методу биће заморно, а код постаје дугачак и мање читљив.
throws
је такође корисно када сте означили изузетак (изузетак који се мора обрадити) који не желите да ухватите у свом тренутном методу.
Кључна реч Јава бацање
Кључна throw
реч се користи за изричито избацивање једног изузетка.
Када се изузме изузетак, ток извршавања програма преноси се из try
блока у catch
блок. Кључну throw
реч користимо у оквиру методе.
Његова синтакса је:
throw throwableObject;
Предмет који се може бацити је инстанца класе Throwable
или подкласе Throwable
класе.
Пример 2: Кључна реч Јава Јава
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Оутпут
Изузетак у нити "маин" јава.ланг.АритхметицЕкцептион: Покушај поделе са 0 на Маин.дивидеБиЗеро (Маин.јава:3) на Маин.маин (Маин.јава:7) статусу излаза 1
У овом примеру изричито бацамо ArithmeticException.
Напомена: ArithmeticException
је непроверени изузетак. Обично није потребно баратати непровереним изузецима.
Пример 3: Бацање провереног изузетка
import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) )
Оутпут
Фајл није пронађен
findFile()
Метод баца IOException
са поруком смо прошли у свом градитељу.
Имајте на уму да пошто је реч о изузећу који је означен, морамо га навести у throws
клаузули.
Методе које позивају ову findFile()
методу морају или да обраде овај изузетак или да га throws
саме наведу помоћу кључне речи.
Овај изузетак смо обрадили у main
()
методи. Ток извођења програма преноси се из try
блока у catch
блок када се изузме изузетак. Дакле, остатак кода у try
блоку се прескаче и catch
извршавају се изрази у блоку.