Ne zaman java.lang.Error yakalamak için?

oy
101

Hangi durumlarda tek yakalamak gerektiğini java.lang.Errorbir uygulama üzerinde?

Oluştur 09/12/2008 saat 14:56
kaynak kullanıcı
Diğer dillerde...                            


16 cevaplar

oy
6

Neredeyse hiç. Hatalar uygulamalar genellikle hakkında bir şey yapamaz konular olacak şekilde tasarlanmıştır. Bunun tek istisnası hatasının sunumunu ele almak olabilir ama hata bağlı planlandığı gibi bile gitmek olmayabilir.

Cevap 09/12/2008 saat 14:59
kaynak kullanıcı

oy
46

Asla. Sen uygulama kodunun sonraki satırını çalıştırmak mümkün olduğundan emin olamaz. Bir alırsanız OutOfMemoryError, sahip güvenilir bir şey yapmak mümkün olacak garanti . RuntimeException yakala ve İstisnalar kontrol ama asla hatalar.

http://pmd.sourceforge.net/rules/strictexception.html

Cevap 09/12/2008 saat 15:00
kaynak kullanıcı

oy
5

Ve bir hata yakalamak, diğer durumlarda bir çift vardır bunu rethrow zorunda . Örnek için ThreadDeath (örn. Bir uygulama sunucusu) yakalandı asla, bu bir içerdiği ortamda yakalamak büyük bir sorun olduğunu neden olabilir:

o zaman uyumsuz sonlandırıldı sonra temizlemek gerekir yalnızca bir uygulama bu sınıfın örneklerini yakalamak gerekir. ThreadDeath bir yöntem ile yakalandı ise, iplik aslında ölür, böylece rethrown edilmesi önemlidir.

Cevap 09/12/2008 saat 15:09
kaynak kullanıcı

oy
87

Genellikle, asla. Ancak, bazen belirli Hataları yakalamak gerekir.

Eğer çerçeve-imsi kodunu (3. taraf sınıfları yükleme) yazıyorsanız, LinkageErrors (sınıf def bulundu tatminsiz bağlantısını uyumsuz sınıf değişikliği) yakalamak için akıllıca olabilir. Ayrıca Hata sublcasses atma aptal 3. taraf kodunu gördüm, bu yüzden ya bu ele almak gerekecek.

Bu arada, ben OutOfMemory kurtarmak mümkün değildir emin değilim.

Cevap 09/12/2008 saat 15:12
kaynak kullanıcı

oy
7

Çok nadiren.

Yalnızca bir iş parçacığı ölme nedeni ile bir mesaj yayınlamasına DENEMEYİN amacıyla bir dişin üst düzeyinde söyleyebilirim.

sizin için bu tür bir şey yapan bir çerçevede ise, iskelet üzerine bırakın.

Cevap 09/12/2008 saat 15:15
kaynak kullanıcı

oy
6

Bir Errorgenellikle yakalanmış olmamalı o kadar, hiçbir zaman ortaya anormal bir duruma işaret eder .

Için Java API Şartname itibaren Errorsınıfta:

Bir Erroralt sınıfı Throwable dair makul bir uygulama yakalamak çalışmamalıdır ciddi sorunlara işaret eder. Çoğu tür hatalar anormal durumlardır. [...]

bu hataların oluşmasına asla anormal durumlardır beri bir yöntem, onun fıkra yönteminin yürütülmesi sırasında atılan ancak yakalanmış etmeyeceğiniz Hata herhangi alt sınıflarını atar içinde beyan etmek gerekli değildir.

Şartname bahseder gibi, bir Errortek bir zaman Şans, olan durumlarda atılır Erroruygulama yapabileceği çok az şey vardır, meydana gelir ve bazı durumlarda, Java Virtual Machine kendisi kararsız bir durumda olabilir (örneğin VirtualMachineError)

Bir rağmen Erroralt sınıfı arasında Throwablehangi bir tarafından yakalanan anlamına gelir try-catchbir zaman uygulama anormal durumda olacağı gibi, fıkra, ama muhtemelen gerçekten gerekli değildir ErrorJVM tarafından atılır.

Bölümde bu konuda kısa bir bölüm de var 11.5 İstisna Hiyerarşi içinde Java Dili Şartname, 2nd Edition .

Cevap 09/12/2008 saat 15:18
kaynak kullanıcı

oy
4

Çok, çok nadiren.

Sadece bir çok çok spesifik bilinen durumlar için yaptı. Örneğin, java.lang.UnsatisfiedLinkError iki eğer atmak olabilir bağımsızlık ClassLoader yükü aynı DLL. (Ben paylaşılan classloader JAR taşımak gerektiğini kabul ediyoruz)

Ama en sık karşılaşılan durum, kullanıcının şikayet geldiğinde ne olduğunu öğrenmek amacıyla giriş gerekli olmasıdır. Sen ziyade sessizce ölü bir ileti ya da kullanıcıya bir açılır pencere, istiyorum.

C / C ++ bile programcı hatasını pop ve bir şey insanların çıkış (örneğin bellek hatası) önce anlamıyorum söyle.

Cevap 09/12/2008 saat 15:28
kaynak kullanıcı

oy
6

Eğer yeterince yeni birim test çerçevenin oluşturulması gereken deli iseniz, test koşucu muhtemelen herhangi bir test durumlarda tarafından atılan java.lang.AssertionError yakalamak gerekir.

Aksi takdirde, diğer cevaplar bakın.

Cevap 10/12/2008 saat 21:44
kaynak kullanıcı

oy
16

Genellikle her zaman yakalamak gerektiğini java.lang.Errorve bir günlüğüne yazma veya kullanıcıya görüntüler. Ben destek çalışmak ve programcılar bir programda neler olduğunu söyleyemem günlük görüyoruz.

Eğer bir cin parçacığı varsa o zaman sona önlemek gerekir. Diğer durumlarda başvurunuz düzgün çalışacaktır.

Yalnızca yakalamak gerektiğini java.lang.Erroren üst düzeyde.

Eğer hata listesinde bakarsanız en işlenebilir göreceksiniz. Örneğin bir ZipErrorbozuk zip dosyaları okuma oluşur.

Sık karşılaşılan hatalar OutOfMemoryErrorve NoClassDefFoundErrorçoğu durumlarda çalışma zamanı sorunlardan ikisi de, hangi.

Örneğin:

int length = Integer.parseInt(xyz);
byte[] buffer = new byte[length];

Bir üretebilir OutOfMemoryErrorama bir çalışma zamanı sorunu ve programı sonlandırmak için hiçbir neden yoktur.

NoClassDefFoundErrorBir kütüphane yoksa çoğunlukla meydana veya başka bir Java sürümü ile çalışıyorsanız. o programın isteğe bağlı dahilse o zaman programı sonlandırmak olmamalıdır.

Ben yakalamak için iyi bir fikirdir neden daha birçok örnek verebiliriz Throwableüst düzeyde ve yararlı bir hata mesajı üretir.

Cevap 05/03/2009 saat 13:29
kaynak kullanıcı

oy
14

parçacıklı ortamında, en sık yakalamak istiyorum! Bunu yakalamak zaman bunu oturum ve tüm uygulamayı sonlandırmak! Bunu yapmazsanız, bazı önemli rol yapıyor olabilir bazı iplik ölmüş olurdu ve uygulamanın geri kalanı her şeyin normal olduğunu düşünürler. Bunun dışında, birçok istenmeyen durumlar ortaya çıkabilir. Bir küçük sorun diğer konu yüzünden biri iplik çalışmıyor bazı istisnalar atma başlarsanız kolayca sorunun kökünü bulmak mümkün olmaz olmasıdır.

Örneğin, genellikle bir halka olması gerekir:

try {
   while (shouldRun()) {
       doSomething();
   }
}
catch (Throwable t) {
   log(t);
   stop();
   System.exit(1);
}

Hatta bazı durumlarda, (hatta belki bazı bellek boşaltmak ve devam edin) düzenli uygulamayı kapatmak mümkün olacaktır OutOfMemoryError üzerinde, örneğin, farklı farklı Hataları işlemek ister ki, bazıları diğerlerinden üzerinde, çok yapabileceğiniz yoktur.

Cevap 07/03/2009 saat 17:39
kaynak kullanıcı

oy
1

o anormal bir durum olduğu gibi, ideal bizim Java uygulaması Hata yakalamak asla. Uygulama anormal durumda olacak ve carshing ya da bazı ciddi yanlış sonuç veren neden olabilir.

Cevap 26/01/2011 saat 07:23
kaynak kullanıcı

oy
1

Bir iddia yapıldığında kontrol ünitesi testler içinde hatayı yakalamak için uygun olabilir. Birisi iddialarını devre dışı bırakır veya başka Eğer bilmek istersiniz iddia siler

Cevap 19/08/2012 saat 21:35
kaynak kullanıcı

oy
3

Bir Android uygulamasında bir yakalıyorum java.lang.VerifyError . Ben OS eski bir sürümüyle ve kütüphane kodu ile cihazların çalışmaz kullanıyorum bir kütüphane böyle bir hata verir. Tabii zamanında OS sürümünü kontrol ederek hatasını önlemek ama olabilir:

  • En eski desteklenen SDK belirli kütüphanesi için gelecekte değişebilir
  • Try-catch hata bloğu daha büyük geri düşen mekanizmasının bir parçasıdır. Onlar kütüphane desteği gerekiyordu olmasına rağmen bazı spesifik cihazlar, istisnalar atmak. Bir sonbahar arka çözümü kullanmak VerifyError ve tüm özel durumları yakalamak.
Cevap 14/03/2013 saat 07:17
kaynak kullanıcı

oy
1

JVM artık beklendiği gibi çalışmıyor, ya da eşiğinde olan bir hata vardır. Eğer bir hata yakalamak durumunda catch bloğu çalışacağı garanti ve sonuna kadar aday olacağını da az var.

Ayrıca koşu bilgisayarın mevcut bellek durumuna bağlı olacaktır, bu yüzden denemek ve elinden geleni yap, test etmek yolu yoktur. Yalnızca bir hasardous sonucu verecektir.

Ayrıca kodun okunabilirliği sürümüne geçirilecektir.

Cevap 23/04/2013 saat 17:50
kaynak kullanıcı

oy
3

Bunun bir test ortamında java.lang.AssertionError yakalamak için oldukça kullanışlı ...

Cevap 27/11/2013 saat 02:53
kaynak kullanıcı

oy
2

İdeal / yakalama hataları işlemek gerekir. Ama biz çerçevenin veya uygulamanın gereksinimine göre yapmanız gereken durumlar olabilir. I uygulayan bir XML Ayrıştırıcı cini Say DOM Ayrıştırıcı daha Bellek tüketir. O aldığında Ayrıştırıcı iplik gibi bir gereklilik öldü edilmemelidir varsa OutOfMemoryError , bunun yerine idare ve uygulama / çerçevenin yöneticisine bir mesaj / posta göndermek gerekir.

Cevap 05/05/2014 saat 19:22
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more