Один заявляет об этом, а другой —
Есть пять ключевых слов, связанных с обработкой исключений в Java, например, try, catch, finally, throw и throws . Помимо различий между final, finally и finalize , throw vs throws является одним из часто задаваемых вопросов об интервью на Java .
- Ключевое слово throw используется для выброса Exception из любого метода или статического блока в Java, в то время как ключевое слово throw, используемое в объявлении метода, указывает, какое исключение может быть выброшено этим методом. Они не являются взаимозаменяемыми.
- Если какой-либо метод выбрасывает флажок Exception, как показано в примере ниже, вызывающая сторона может либо обработать это исключение , перехватив его, либо повторно вызвать его, объявив другое предложение throws в объявлении метода.
- Предложение Throw можно использовать в любой части кода, где, по вашему мнению, в вызывающий метод необходимо добавить конкретное исключение.
Подчеркивая исключения Java:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
Java. яз. объект
|
+ — Java . яз. Throwable
|
+ — Java . яз. исключение
| |
| + — Java . яз. ClassNotFoundException
| |
| + — Java . Ио. IOException
| | |
| | + — Java . Ио. FileNotFoundException
| |
| + — Java . яз. RuntimeException
| |
| + — Java . яз. Исключение нулевого указателя
| |
| + — Java . яз. IndexOutOfBoundsException
| |
| + — Java . яз. ArrayIndexOutOfBoundsException
|
+ — Java . яз. ошибка
|
+ — Java . яз. VirtualMachineError
|
+ — Java . яз. OutOfMemoryError
|
Если метод генерирует исключение, он должен быть либо окружен блоком try catch, чтобы перехватить его, либо этот метод должен иметь предложение throws в своей сигнатуре. Без предложения throws в сигнатуре компилятор Java JVM не знает, что делать с исключением. Предложение throws сообщает компилятору, что это конкретное исключение будет обработано вызывающим методом.
Ниже приведен очень простой пример, который объясняет поведение блоков Throw, Throws, Try, Catch, finally в Java.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
пакет ком . crunchify. учебные пособия ;
Импортировать Java. Ио. FileInputStream ;
Импортировать Java. Ио. FileNotFoundException ;
/ **
* @author Crunchify.com
* /
общественности учебный класс CrunchifyThrowThrows {
@SuppressWarnings ( «не используется» )
общественности статический недействительным главная ( Строка args [ ] ) бросает исключение {
FileInputStream crunchifyStream1 знак равно ноль ;
FileInputStream crunchifyStream2 знак равно ноль ;
строка имя файла знак равно Crunchify.txt ;
Система. вне. println ( main: Starting + CrunchifyThrowThrows . класс. getName ( ) + с именем файла = + fileName ) ;
// получаем поток ввода файла 1
пытаться {
crunchifyStream1 знак равно crunchifyTest1 ( fileName ) ;
} ловить ( FileNotFoundException ex ) {
Система. вне. println ( main: Oops, FileNotFoundException перехвачено ) ;
} ловить ( Исключение экс ) {
Система. вне. println ( main: Oops, genreal исключения обнаружены ) ;
}
// получаем поток ввода файла 2
crunchifyStream2 знак равно crunchifyTest2 ( fileName ) ;
Система. вне. println ( main: + CrunchifyThrowThrows . класс. getName ( ) + закончилась ) ;
}
общественности статический FileInputStream crunchifyTest1 ( String fileName ) бросает FileNotFoundException {
FileInputStream crunchifyStream знак равно новый FileInputStream ( fileName ) ;
Система. вне. println ( crunchifyTest1: поток ввода файла создан ) ;
вернуть crunchifyStream ;
}
общественности статический FileInputStream crunchifyTest2 ( String fileName ) бросает исключение {
FileInputStream crunchifyStream знак равно ноль ;
пытаться {
crunchifyStream знак равно новый FileInputStream ( fileName ) ;
} ловить ( FileNotFoundException ex ) {
бросать новый Исключение ( crunchifyTest2: К сожалению, FileNotFoundException перехвачено ) ;
//System.out.println(crunchifyTest2: К сожалению, исключение FileNotFoundException );
} в конце концов {
Система. вне. println ( crunchifyTest2: finally block ) ;
}
Система. вне. println ( crunchifyTest2: возвращение из crunchifyTest2 ) ;
вернуть crunchifyStream ;
}
}
|
Результат:
|
1
2
3
4
5
6
|
главная : Начиная ком . crunchify. учебники . CrunchifyThrowThrows с именем файла знак равно Crunchify. текст
главная : Ой , FileNotFoundException пойман
crunchifyTest2 : в конце концов блок
Исключение в нить главный Java. яз. Исключение : crunchifyTest2 : Ой , FileNotFoundException пойман
на ком . crunchify. учебники . CrunchifyThrowThrows . crunchifyTest2 ( CrunchifyThrowThrows . java : 45 )
на ком . crunchify. учебники . CrunchifyThrowThrows . main ( CrunchifyThrowThrows . java : 30 )
|
Теперь просто замените строки 45 и 46 на строку ниже, чтобы увидеть результат ниже:
|
1
2
|
// бросаем новое исключение (crunchifyTest2: Упс, FileNotFoundException перехватил);
Система. вне. println ( crunchifyTest2: К сожалению, FileNotFoundException перехвачено ) ;
|
Новый результат:
|
1
2
3
4
5
6
|
главная : Начиная ком . crunchify. учебники . CrunchifyThrowThrows с именем файла знак равно Crunchify. текст
главная : Ой , FileNotFoundException пойман
crunchifyTest2 : Ой , FileNotFoundException пойман
crunchifyTest2 : в конце концов блок
crunchifyTest2 : Возвращаясь из crunchifyTest2
главная : ком . crunchify. учебники . CrunchifyThrowThrows закончилась
|
Список всех учебных пособий по Java, которые могут вас заинтересовать.
Бонусные советы по исключениям:
- Нормальное выполнение программы сразу же разветвляется при возникновении исключения.
- Проверенные исключения должны быть перехвачены или переданы. Это можно сделать с помощью оператора try… catch или путем определения исключения в определении метода.
- Исключение перехватывается первым блоком перехвата , связанный класс исключений которого соответствует классу или суперклассу выданного исключения.
- Если в цепочке исключений не найдено соответствующего блока catch , поток, содержащий выброшенное исключение, завершается.
- Блок finally после оператора try… catch выполняется независимо от того, перехвачено исключение или нет.
- Возврат в блоке finally разрывает цепочку исключений для вызывающего даже для неисследованных исключений.
0.00 (0%) 0 votes








