Java İstisnaları Doğru Şekilde Nasıl Kullanılmalı?

  • Brian Curtis
  • 0
  • 892
  • 113
reklâm

Bir programlama acemi olarak Tüm Stressiz Programlama Nasıl Öğrenilir Tüm Stressiz Programlama Nasıl Öğrenilir Belki de bir kariyer ya da hobi olarak programlama yapmaya karar verdiniz. Harika! Ama belki bunalmış hissetmeye başladın. Çok iyi değil. İşte yolculuğunuzu kolaylaştırmak için yardım. kavramı istisna işleme kafanı sarmak için zor olabilir. Kavramın kendisinin zor olduğu değil, ancak terminoloji, olduğundan daha gelişmiş görünmesini sağlayabilir. Ve kötüye kullanma ve kötüye kullanma eğilimi gösterecek kadar güçlü bir özellik.

Bu makalede, istisnaların ne olduğunu, neden önemli olduklarını, nasıl kullanacaklarını ve kaçınılması gereken yaygın hataları öğreneceksiniz. En modern diller 6 Yeni Başlayanlar İçin Öğrenilecek En Kolay Programlama Dilleri 6 Yeni başlayanlar için Öğrenilen En Kolay Programlama Dilleri Programlamayı öğrenmek, düzenleme süreciyle ilgili olduğu kadar doğru dili bulmakla da ilgilidir. Yeni başlayanlar için ilk altı en kolay programlama dili. Java 7'den yeni bir programlama dili için ustalık için faydalı püf noktaları 7 Yeni bir programlama dili için ustalık için faydalı püf noktaları Muhtemelen bir şeyleri öğrendiğiniz kadar çabuk unutacaksınız. Bu ipuçları, tüm bu yeni bilgileri daha iyi saklamanıza yardımcı olabilir. , bu ipuçlarının çoğunu yanınıza alabilirsiniz.

Java İstisnalarını Anlama

Java’da istisna anormal bir şeyi gösteren bir nesnedir (veya “olağanüstü”) uygulamanızın çalışması sırasında oluştu. Bu istisnalar atılmış, temelde bir istisna nesnesi oluşturulduğu anlamına gelir (hataların nasıl yapıldığına benzer “kalkık”).

Güzelliği yapabilirsiniz yakalamak Anormal durumla başa çıkmanıza izin veren ve uygulamanızın hiçbir şey ters gitmemiş gibi çalışmaya devam etmesine izin veren atılan istisnalar. Örneğin, C'deki boş bir işaretçi uygulamanızı çökertebilirken, Java atmanızı ve yakalamanızı sağlar NullPointerExceptionnull değişkeni bir çarpmaya neden olma şansına sahip olmadan önce.

Unutmayın, bir istisna sadece bir objedir, fakat önemli bir özelliği olan: İstisna sınıf veya herhangi bir alt sınıfı İstisna. Java'da her türlü yerleşik istisna olsa da, isterseniz kendiniz de oluşturabilirsiniz. En yaygın Java istisnalarından bazıları şunlardır:

  • NullPointerException
  • NumberFormatException
  • IllegalArgumentException
  • Çalışma zamanı istisnası
  • IllegalStateException

Peki, bir istisna atarsan ne olur??

İlk olarak, Java, attığınız istisna türünü işleyen bir kod olup olmadığını görmek için hemen yöntemin içine bakar. Bir işleyici yoksa, orada bir işleci olup olmadığını görmek için geçerli yöntemi çağıran yönteme bakar. Değilse, çağrılan yönteme bakar. o yöntem ve ardından sonraki yöntem vb.. İstisna yakalanmadıysa, uygulama yığın izini yazdırır ve ardından kilitlenir. (Aslında basitçe çarpmaktan daha farklı, ancak bu, bu makalenin kapsamı dışında ileri bir konu.)

bir yığın izleme bir istisna işleyici ararken Java'nın geçtiği tüm yöntemlerin listesidir. İşte bir yığın izlemenin neye benzediği:

Com.example.myproject.Book.getTitle (com.exava.16) adresindeki com.example.myproject.Book.getTitle (Book.java:16) dizisindeki özel durum com.example adresinde. myproject.Bootstrap.main (Bootstrap.java:14)

Bundan çok şey öğrenebiliriz. İlk olarak, atılan istisna bir NullPointerException. Meydana geldi getTitle () Book.java'nın 16. satırındaki yöntem. Bu yöntem dendi getBookTitles () Author.java'nın 25. satırında. o yöntem denildi ana() Bootstrap.java'nın 14. satırında. Gördüğünüz gibi, tüm bunları bilmek hata ayıklamayı kolaylaştırır.

Ancak yine de, istisnaların gerçek yararı “sap” İstisna yakalayarak, işleri doğru düzelterek ve uygulamayı çökmeden yeniden başlatarak anormal durum.

Kodda Java İstisnalarını Kullanma

Diyelim ki sahipsin birYöntem () tamsayı alır ve tamsayı 0'dan küçük veya 100'den büyükse kırılabilecek bir mantık yürütür. Bu, bir istisna atmak için iyi bir yer olabilir:

public void someMethod (int değer) if (değer 100) atma IllegalArgumentException();  //…

Bu istisnayı yakalamak için, nereye gitmeniz gerekir birYöntem () denir ve kullanın try-catch bloğu:

public void callingMethod () try someMethod (200); someOtherMethod ();  catch (IllegalArgumentException e) // buradaki istisnayı ele alın //…

İçindeki her şey Deneyin Bir istisna atılana kadar blok sırayla çalıştırılır. Bir istisna atıldığında, sonraki tüm ifadeler atlanır ve uygulama mantığı derhal atlar. yakalamak blok.

Örneğimizde, try bloğuna girip hemen çağrı yapalım birYöntem (). 200 0 ile 100 arasında olmadığı için IllegalArgumentException Atıldı. Bu derhal yürütülmesi sona erer birYöntem (), mantığın geri kalanını try bloğunda atlar (someOtherMethod () asla çağrılmaz) ve catch bloğu içinde yürütmeye devam eder.

Eğer ararsak ne olur? birYöntem (50) yerine? IllegalArgumentException asla atılmaz. birYöntem () normal olarak yürütürdü. Try bloğu normal olarak çalıştırılır, çağrı someOtherMethod () someMethod () tamamlandığında. Ne zaman someOtherMethod () biterse, catch bloğu atlanır ve callingMethod () devam edecekti.

Her try bloğu için birden fazla catch bloğuna sahip olabileceğinizi unutmayın:

public void callingMethod () try someMethod (200); someOtherMethod ();  catch (IllegalArgumentException e) // buradaki istisnayı ele al catch (NullPointerException e) // buradaki istisnayı ele al //…

Ayrıca isteğe bağlı olduğunu unutmayın en sonunda blok da var:

public void method () deneyin //… catch (İstisna e) //… nihayet //…

Son bloktaki kod: her zaman ne olursa olsun idam edildi. Try bloğunda bir return ifadesi varsa, sonuçtan önce metoddan geri dönmeden önce çalıştırılır. Catch bloğuna başka bir istisna atarsanız, sonuç bloğu istisna atılmadan önce yürütülür..

Yöntem sona ermeden önce temizlenmesi gereken nesneleriniz varsa, sonunda bloğu kullanmanız gerekir. Örneğin, try bloğunda bir dosya açtıysanız ve daha sonra bir istisna attıysanız, finally bloğu, yöntemi terk etmeden önce dosyayı kapatmanıza izin verir..

Bir toplama bloğu olmayan bir son bloğa sahip olabileceğinizi unutmayın:

public void method () en sonunda //… deneyin //…

Bu, atılan istisnaların yöntem başlatma yığınını çoğaltmasına izin verirken gerekli tüm temizliği yapmanızı sağlar (yani, istisnayı burada ele almak istemezsiniz, ancak yine de önce temizlemeniz gerekir).

Java'da İşaretli ve Denetlenmeyen İstisnalar

Çoğu dilin aksine, Java arasındaki farkı ayırt eder işaretli istisnalar ve denetlenmeyen istisnalar (örneğin, C # yalnızca denetlenmeyen istisnalar vardır). İşaretli bir istisna şart istisnanın atıldığı ya da kodun derlenmeyeceği yöntemde yakalanın.

İşaretli bir istisna oluşturmak için, İstisna. Denetlenmeyen bir istisna oluşturmak için, Çalışma zamanı istisnası.

İşaretli bir istisna atan herhangi bir yöntem, bunu kullanan yöntem imzasında göstermelidir. atar Anahtar kelime. Java'nın yerleşik olduğundan beri IOException işaretli bir istisnadır, aşağıdaki kod derlenmez:

public void wontCompile () //… if (someCondition) yeni IOException () at;  //…

İlk önce işaretli bir istisna attığını beyan etmelisiniz:

public void willCompile (), IOException atıyor //… if (someCondition) atmak yeni IOException ();  //…

Bir yöntemin istisna atma olarak bildirilebileceğini, ancak hiçbir zaman istisna atmadığını unutmayın. Buna rağmen, istisnanın hala yakalanması gerekecek, aksi halde kod derlenmeyecek.

Kontrol edilmiş veya işaretlenmemiş istisnaları ne zaman kullanmalısınız??

Resmi Java belgelerinde bu soru üzerine bir sayfa bulunmaktadır. Kısa ve özlü bir kural ile farkı özetler: “Bir müşteriden bir istisnadan kurtarması makul bir şekilde beklenebilirse, kontrol edilmiş bir istisna yapın. Bir müşteri istisnadan kurtarmak için hiçbir şey yapamıyorsa, onu kontrol edilmeyen bir istisna yapın.”

Ancak bu kılavuz eski olabilir. Bir yandan, kontrol edilen istisnalar daha sağlam kodlarla sonuçlanır. 10 Temizleyici ve Daha İyi Kod Yazma İpuçları 10 Temizleyici ve Daha İyi Kod Yazma İpuçları Temiz kod yazmak aslında olduğundan daha kolay görünür, ancak faydaları buna değer. İşte bugün temizleyici kodunu yazmaya başlayabilirsiniz. . Öte yandan, başka hiçbir dil, Java ile aynı şekilde istisnaları kontrol etmedi; bu da iki şeyi gösteriyor: birincisi, diğer dillerin çalması için yeterli özellik değil, ikincisi de kesinlikle onlarsız yaşayabilir. Ayrıca, işaretli istisnalar, Java 8'de tanıtılan lambda ifadeleriyle hoş görünmüyor.

Java İstisnaları Kullanımıyla İlgili Kurallar

İstisnalar faydalıdır, fakat kolayca kötüye kullanılır ve kötüye kullanılır. İşte bunlarla uğraşmaktan kaçınmanıza yardımcı olacak birkaç ipucu ve en iyi uygulamalar:.

  • Genel istisnalar için özel istisnaları tercih et. kullanım NumberFormatException üzerinde IllegalArgumentException mümkünse, aksi takdirde kullanın IllegalArgumentException üzerinde Çalışma zamanı istisnası mümkün olunca.
  • Asla yakalama Atılabil! İstisna sınıf aslında uzanır Atılabil, ve catch bloğu aslında işe yarıyor Atılabil veya atılabilir olan herhangi bir sınıf. Ancak Hata sınıf da uzar Atılabil, ve asla yakalamak istemezsin Hata Çünkü Hatas ciddi kurtarılamayan sorunları belirtir.
  • Asla yakalama İstisna! InterruptedException uzanır İstisna, yani yakalayan herhangi bir blok İstisna da yakalayacak InterruptedException, ve ne yaptığınızı bilmiyorsanız (özellikle çok iş parçacıklı uygulamalarda) uğraşmak istemediğiniz çok önemli bir istisna. Hangi istisnayı yakalayacağınızı bilmiyorsanız, hiçbir şey yakalamamayı düşünün.
  • Hata ayıklamayı kolaylaştırmak için açıklayıcı mesajlar kullanın. Bir istisna atarken, bir sicim bir argüman olarak mesaj. Bu mesaja, alıcı bloğu kullanılarak Exception.getMessage () yöntem, ancak istisna asla yakalanmazsa, ileti yığın izlemesinin bir parçası olarak da görünür.
  • İstisnaları yakalamama ve görmezden gelmemeye çalışın. Kontrol edilen istisnaların getirdiği rahatsızlıktan kurtulmak için bir çok acemi ve tembel programcı bir kilitleme bloğu kuracak, ancak boş bırakacaktır. Kötü! Her zaman zarifçe kullanın, ancak yapamıyorsanız, en azından bir yığın izini yazdırabilirsiniz, böylece istisnanın atıldığını bilirsiniz. Bunu kullanarak yapabilirsiniz Exception.printStackTrace () yöntem.
  • Aşırı kullanım istisnalarına dikkat edin. Çekiç varken, her şey bir çiviye benziyor. İstisnaları ilk kez öğrendiğinizde, her şeyi bir istisna haline getirmek zorunda kalabilirsiniz… uygulamanızın kontrol akışının çoğunun istisna işlemesi için olduğu noktaya. Unutmayın, istisnalar “olağanüstü” olaylar!

Şimdi bunların ne olduğunu, neden kullanıldığını ve bunları kendi kodunuza nasıl dahil edebileceğinizi anlamak için istisnalar dışında yeterince rahat olmalısınız. Eğer kavramı tam olarak anlamadıysanız, sorun değil! Bunun için biraz zaman aldı “tık” kafamda, o yüzden acele etmeniz gerekmiyor gibi hissedin 6 Programcı Olmayacağınız İşaretler 6 Programcı Olmayacağınız İşaretler Herkes programcı olmaktan mahrum değil. Bir programcı olmak istediğinizden tamamen emin değilseniz, işte sizi doğru yöne işaret edebilecek bazı işaretler. . Acele etmeyin.

Sorusu olan var mı? Kaçırdığım istisna ile ilgili diğer ipuçlarını biliyor musunuz? Bunları aşağıdaki yorumlarda paylaş!




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.