DeferredLoadException
FormatException
IntegerDivisionByZeroException
IOException
FileSystemException
HttpException
ProcessException
SignalException
SocketException
StdinException
StdoutException
TlsException
WebSocketException
IsolateSpawnException
TimeoutException
DeferredLoadException
FormatException
IntegerDivisionByZeroException
IOException
FileSystemException
HttpException
ProcessException
SignalException
SocketException
StdinException
StdoutException
TlsException
WebSocketException
IsolateSpawnException
TimeoutException
Biz ko'rib chiqmoqchi bo'lgan har bir istisno turi uchun biz blokda o'zimizni qo'shishimiz mumkin:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
void main (){
try{
int x = 9;
int y = 0;
int z = x ~/ y;
print(z);
}
on IntegerDivisionByZeroException{
print("Обработка исключения IntegerDivisionByZeroException");
}
on FormatException{
print("Обработка исключения FormatException");
}
print("Завершение программы");
}
|
Throw bayonoti va o'z istisno turlarini yaratish
Bayonotni tashlash
Throw iborasi bizga istisnoni to'g'ri joyga tashlashga imkon beradi. Quyidagi kodni ko'rib chiqing:
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
|
void main (){
try{
Person tom = Person("Tom", -45);
print(tom.age);
}
on Exception catch(e){
print(e);
}
print("Завершение программы");
}
class Person{
String name;
int age = 1;
Person(this.name, age){
if(age < 1 || age > 110) {
throw Exception("Недопустимый возраст");
}
else{
this.age = age;
}
}
}
|
Masalan, yangi foydalanuvchi - Person sinfining ob'ektini yaratishda biz konstruktorga yoshga qarab yaroqsiz (masalan, salbiy qiymat) o'tish holatlarining oldini olishni xohlaymiz. Bunday holda, biz throw iborasi yordamida istisno yaratishimiz mumkin:
1
|
throw Exception("Недопустимый возраст");
|
Xabar Istisno konstruktoriga uzatiladi, uni istisno bilan ishlashda olish mumkin.
Shunday qilib, try blokida quyidagi qatorni bajarayotganda, istisno qilinadi:
1
|
Person tom = Person("Tom", -45);
|
Va on..catch blokida siz ushbu istisnoni hal qilishingiz mumkin:
1
2
3
|
on Exception catch(e){
print(e);
}
|
Catch blokidagi e argumenti bilan biz xato xabarini olishimiz mumkin. Konsol chiqishi:
Exception: Недопустимый возраст
Завершение программы
O'zingizning istisnolaringizni yaratish
O'rnatilgan Dart kutubxonasi har xil turdagi istisnolarni taqdim etadi. Biroq, ba'zi muayyan holatlar uchun biz o'z istisno turlarini yaratishni xohlashimiz mumkin. Misol uchun, yuqoridagi misolda, foydalanuvchining yoshi bilan biz barcha harakatlarni alohida istisno sifatida tartibga solishimiz mumkin. Masalan:
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
|
void main (){
try{
Person tom = Person("Tom", -45);
print(tom.age);
}
on AgeException catch(e){
print(e.getErrorMessage());
}
print("Завершение программы");
}
class Person{
String name;
int age = 1;
Person(this.name, age){
if(age < 1 || age > 110) {
throw AgeException();
}
else{
this.age = age;
}
}
}
class AgeException implements Exception{
String getErrorMessage() {
return "Недопустимый возраст";
}
}
|
Dasturning konsol chiqishi:
Недопустимый возраст
Завершение программы
AgeException istisno klassi bu yerda aniqlanadi, bu Exception tipidagi interfeysni amalga oshiradi. (Aslida, biz Istisnoni amalga oshirmasdan sinfni belgilashimiz mumkin). Va bu sinf xato xabarini qaytaradigan o'zining getErrorMessage usuliga ega.
Istisnoni ko'rib chiqishda biz xato xabarini ko'rsatish uchun ushbu usuldan foydalanishimiz mumkin:
1
2
3
|
on AgeException catch(e){
print(e.getErrorMessage());
}
|
Bunday holda, catchdagi e parametri getErrorMessage usulini chaqirish mumkin bo'lgan AgeException ob'ektini ifodalaydi.
Do'stlaringiz bilan baham: |