İstisna nedir?
İstisna, programın yürütülmesi sırasında ortaya çıkan bir sorunla ilgilidir. Beklenmedik bir durum ortaya çıkar. İyi bir örnek, bir bölme işlemi gerçekleştirdiğiniz ve ardından sıfıra (0) bölmenizdir. Bir istisna ortaya çıkacak.
Bu Visual Basic Eğitiminde şunları öğreneceksiniz:
- İstisna nedir?
- İstisna İşleme nedir?
- Try / Catch Sözdizimi
- İstisnaları İşleme Örneği
- Kullanıcı Tanımlı İstisnalar
- Nesneleri Fırlatmak
İstisna İşleme nedir?
İstisnalar dışında, bir programın kontrolünü bir bölümden diğerine aktarabilirsiniz. VB.NET'te istisnalar aşağıdaki 4 anahtar sözcük kullanılarak ele alınır:
Anahtar kelime | Detay |
Deneyin | Try bloğunun çalışması, belirli bir istisnanın etkinleştirileceği kod bloğunu belirlemektir. Ardından bir catch bloğu gelmelidir. |
Yakalamak | İstisnanın yakalanması bu blokta yapılır. İstisnanın işlendiği bir istisna işleyicidir. |
En sonunda | Bir istisna oluşmuş olsun ya da olmasın bir dizi ifadeyi çalıştırmak için Nihayet bloğunu kullanın. |
Atmak | Bir problem ortaya çıktıktan sonra bir istisna atılır. Bu, Throw anahtar kelimesinin çalışmasıdır. |
Try / Catch Sözdizimi
Try / Catch deyimleri aşağıda verilen sözdizimini alır:
Try[ try_Statement(s) ][ Exit Try ][ Catch [ exception_name [ As type ] ] [ When expression ][ catch_Statement(s) ][ Exit Try ] ][ Catch… ][ Finally[ finally_Statement(s) ] ]End Try
Try / Catch bloğu, bir istisna yaratabilecek kodu çevrelemelidir. Bu kod, korumalı kod olarak bilinir. Çeşitli istisna türlerini yakalamanız gerektiğinde birden çok catch deyimi kullanabilirsiniz.
İstisnaları İşleme Örneği
Try / Catch deyimleriyle, normal program kodunuzu hata işleme Sisteminden ayırabilirsiniz. Deneyin, Yakala ve Nihayet anahtar sözcüklerini kullanarak bir istisnanın nasıl ele alınacağını gösterelim.
Adım 1) Yeni bir konsol uygulaması oluşturun.
Adım 2) Bu kodu kullanın:
Module Module1Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)Dim answer As IntegerTryanswer = n1 \ n2Catch ex As DivideByZeroExceptionConsole.WriteLine("Exception: {0}", ex)FinallyConsole.WriteLine("Answer is: {0}", answer)End TryEnd SubSub Main()divisionFunction(4, 0)Console.ReadKey()End SubEnd Module
Adım 3) Kodu çalıştırmak için araç çubuğundan Başlat düğmesine tıklayın. Aşağıdaki çıktıyı almalısınız:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- Module1 adlı bir modül oluşturma.
- İki tamsayı argümanı n1 ve n2 ile divisionFunction adlı bir alt prosedür oluşturma. ByVal, argümanların değerlerinin değere göre aktarılacağını belirten bir VB.NET anahtar kelimesidir.
- Answer adında bir tamsayı değişkeni oluşturma.
- Try / Catch bloğunun başlangıcı. Bu blokla bir istisna oluşturabileceğinden şüphelendiğimiz kodu çevrelemeliyiz.
- N1 ve n2 değişkenlerinin değerleri arasında bir bölme işlemi gerçekleştirme. Bölme işleminin sonucu değişken cevaba atanır. Bu kod, örneğin bir sayıyı sıfıra böldüğümüzde bir istisna oluşturabilir, dolayısıyla onu Try / Catch blokları ile çevreledik.
- DivideByZeroException adlı Exception'ı yakalamak ve oluşturulan istisna mesajını ex.
- Kullanıcıyı ortaya çıkan İstisnanın türü / adı konusunda bilgilendirmek için konsolda bazı metinlerin yazdırılması.
- Nihayet bloğu. Bu, bir istisna yakalanmış olsun ya da olmasın yürütülecektir.
- Bölme işleminin sonucunu gösteren bazı metinlerin konsol üzerine yazdırılması.
- Try bloğunun sonu, yani hata işleme kodunun sonu.
- Bölme Fonksiyonu alt prosedürünün sonu.
- Ana alt prosedürün başlangıcı.
- DivisionFunction alt prosedürünü çağırma / çağırma. İki tamsayı bağımsız değişkeninin değerleri buraya aktarılır. N1 = 4 ve n2 = 0'ın değeri. Bu, bölme işleminin 4 \ 0, yani n1 \ n2 olacağı anlamına gelir.
- Kullanıcının kapatmak için işlem yapmasını bekleyen konsol penceresini duraklatmak.
- Ana alt prosedürün sonu.
- Modülün sonu.
Kullanıcı Tanımlı İstisnalar
VB.NET, kendi istisnalarınızı tanımlamanıza izin verir. ApplicationException sınıfından kullanıcı tanımlı istisna sınıfları alabilirsiniz. Bunu bir örnekle gösterelim:
Adım 1) Yeni bir konsol uygulaması oluşturun.
Adım 2) Aşağıdaki kodu kullanın:
Module Module1Public Class HeightIsZeroException : Inherits ApplicationExceptionPublic Sub New(ByVal text As String)MyBase.New(text)End SubEnd ClassPublic Class HeightDim height As Integer = 0Sub showHeight()If (height = 0) ThenThrow (New HeightIsZeroException("Zero Height found"))ElseConsole.WriteLine("Height is: {0}", height)End IfEnd SubEnd ClassSub Main()Dim hght As Height = New Height()Tryhght.showHeight()Catch ex As HeightIsZeroExceptionConsole.WriteLine("HeightIsZeroException: {0}", ex.Message)End TryConsole.ReadKey()End SubEnd Module
Adım 3) Kodu çalıştırmak için üst çubuktan Başlat düğmesine tıklayın. Aşağıdaki çıktıyı almalısınız:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- Module1 adlı bir modül oluşturma.
- HeightIsZeroException adlı bir istisna sınıfı oluşturma. Sınıf, tüm ApplicationException sınıfını miras alır.
- Yeni adlı bir alt prosedür oluşturma. Metin adında bir dize argümanı alacaktır.
- Temel sınıf yapıcısını çağırmak ve ona yukarıdaki argümanı iletmek.
- Yeni alt prosedürün sonu.
- HeightIsZeroException sınıfının sonu.
- Yükseklik adında bir sınıf oluşturmak. Genel erişim değiştiricisi Public'dir, yani herkesin erişimine açık olacaktır.
- Yükseklik adında bir tamsayı değişkeni oluşturmak ve değerini 0 olarak başlatmak.
- ShowHeight () adlı bir alt prosedür oluşturma.
- Yükseklik değişkeninin değerinin 0 olduğu zaman kontrol ediliyor. If… Then koşulunu kullandık.
- Yukarıdaki koşul doğruysa HeightIsZeroException'ı Atmak için. Bu İstisna oluştuğunda Sıfır Yükseklik Bulundu mesajı gösterilecektir.
- If koşulu doğru olmadığında yürütülecek Else bölümü.
- Konsolda 0 olmadığında Yüksekliği gösteren yazdırılacak mesaj.
- If koşulunun sonu.
- ShowHeight () alt prosedürünün sonu.
- Sınıfın sonu Yükseklik.
- Ana alt prosedürün başlangıcı.
- Height sınıfının bir örneği olarak Height adlı bir nesne oluşturma.
- İstisna işleme bloğunun başlangıcı.
- Height sınıfında tanımlanan showHeight () alt prosedürünü çağırma. Bu yönteme erişmek için bu sınıfın bir nesnesini kullandık. Bu satır bir istisnaya neden olabilir. Bu nedenle, onu bir istisna işleme koduyla çevreledik.
- YükseklikIsZeroException Özel Durumunu, ortaya çıkması durumunda ex nesne olarak yakalama.
- HeightIsZeroException yakalandığında konsolda yazdırılacak mesaj.
- İstisna işleme bloğunun sonu.
- Bir kullanıcının kapatmak için işlem yapmasını bekleyen konsol penceresini duraklatın.
- Ana alt prosedürün sonu.
- Modülün sonu.
Nesneleri Fırlatmak
İstisna işlemede, bir nesneyi fırlatmayı seçebilirsiniz. Ancak, nesnenin Sistem'den türetilmesi gerekir. Doğrudan veya dolaylı olarak istisnai sınıf. Örneğin:
Adım 1) Yeni bir konsol uygulaması oluşturun.
Adım 2) Aşağıdaki kodu kullanın:
Module Module1Sub Main()TryThrow New ApplicationException("Throwing a custom exception")Catch ex As ExceptionConsole.WriteLine(ex.Message)FinallyConsole.WriteLine("The Finally Block")End TryConsole.ReadKey()End SubEnd Module
Adım 3) Kodu çalıştırmak için üst çubuktan Başlat düğmesine tıklayın. Aşağıdakileri almalısınız:
İşte kodun bir ekran görüntüsü:
Kod Açıklaması:
- Module1 adlı bir modül oluşturma.
- Ana alt prosedürün başlangıcı.
- Hata işleme kodunun başlangıcı.
- Bir istisna nesnesi fırlatmak. Bu kod bir istisna oluşturabilir, dolayısıyla onu bir Try / Catch bloğu ile çevreledik.
- Satır bir istisna atarsa nesne ex olarak bir istisna yakalama.
- Olması durumunda konsolda istisna mesajı yazdırılıyor.
- Bir istisna yakalanmış olsun ya da olmasın çalışacak Nihayet bloğu.
- Nihayet bloğu yürütüldüğünde konsolda yazdırılacak mesaj.
- İstisna işleme kodunun sonu.
- Bir kullanıcının kapatmak için işlem yapmasını beklerken konsolu bir süre duraklatın.
- Ana alt prosedürün sonu.
- Modülün sonu.
Özet
- Bir istisna, beklenmedik bir durumun neden olduğu program yürütme sırasında ortaya çıkan bir soruna işaret eder.
- Bazı kodların bir istisna oluşturacağından şüpheleniyorsanız, onu bir Try / Catch bloğu ile çevreleyin.
- Nihayet bloğu Try / Catch bloğundan sonra gelir ve bir istisnanın yakalanıp yakalanmadığını yürütür.
- VB.NET, özel istisnalar oluşturmamıza izin verir.