Java Çalışma Zamanı Hatalarına Bir Göz Atın
Java Çalışma Zamanı Hatalarına hızlı bir genel bakış
· Java'daki Çalışma Zamanı Hataları nelerdir?
· Çalışma Zamanı Hatasına Karşı Derleme Zamanı Hatası
· Çalışma Zamanı Hatası Türleri
· Çalışma zamanı hatası nasıl görünür?
· Çalışma Zamanı Hataları atmam gerekir mi
· Çalışma Zamanı İstisnalarını yakalamadığınızda ne olur
· Çalışma Zamanı Hatası Örneği
Java'daki Çalışma Zamanı Hataları Nelerdir?
Programın yürütülmesi sırasında oluşan hatalara çalışma zamanı hataları denir. Bu tür hatalar, sözdizimlerinde yanlış bir şey olmadığı için derleme zamanında tespit edilemez. Yani Runtime hataları, program herhangi bir hata vermeden ve bir “.class” dosyası oluşturmadan başarılı bir şekilde derlendiğinde ortaya çıkar. Ancak program düzgün çalışmıyor. Bu hatalar, çalışma zamanında veya programın yürütülmesi sırasında tespit edilir.
Java derleyicisi çalışma zamanı hatalarını algılamaz çünkü Java derleyicisi, kendisine sunulan tüm çalışma zamanı bilgilerine sahip olmadığı için bu hataları yakalayacak herhangi bir tekniğe sahip değildir. Çalışma zamanı hataları , program çalışırken Java Virtual Machine (JVM) tarafından yakalanır .
Bu çalışma zamanı hataları, istisnalar olarak adlandırılır ve programı anormal bir şekilde sonlandırarak bir hata bildirimi verir.
İstisnalar , çalışma zamanında atılan hatalardır. Bu çalışma zamanı hatalarını işlemek için Java'da istisna işleme tekniklerini kullanabiliriz . İstisna işlemede, programcının hata üretebileceğini düşündüğü kod parçası try bloğunun içine konur ve programcı hatayı catch bloğunun içinde yakalayabilir.
Çalışma Zamanı Hatasına Karşı Derleme Zamanı Hatası
Bir derleme zamanı hatası genellikle semantik veya sözdizimine karşılık gelen hataları ifade eder. Çalışma zamanı hatası, çalışma zamanı sırasında kod yürütme sırasında karşılaştığımız hatayı ifade eder . Kod geliştirme sırasında bir derleme zamanı hatasını kolayca düzeltebiliriz. Bir derleyici çalışma zamanı hatasını belirleyemez.
Tespit etme
Derleyiciler, kod geliştirme sırasında derleme zamanı hatalarını kolayca algılayabilir. Bir derleyici, bir çalışma zamanı hatasını kolayca algılayamaz. Bu nedenle, kodun yürütülmesi sırasında onu tanımlamamız gerekir.
Referans
Bir derleme zamanı hatası, genellikle semantik veya sözdizimine karşılık gelen hataları ifade eder. Bir çalışma zamanı hatası, derleyici tarafından algılanmayan ancak kod yürütme sırasında (çalışma zamanı sırasında) karşılaştığımız hatayı ifade eder.
darbe
Derleme Zamanı Hataları, anlambilim veya sözdizimi hatalarıdır, bazı sözdizimi hatalarını algıladığından kodun çalışmasını (derlemesini) engeller. Wheares Çalışma Zamanı Hataları, kodun tam olarak yürütülmesini engeller.
Sabitleme
Kodun geliştirilmesi sırasında bir derleme zamanı hatasını kolayca düzeltebiliriz. Bir derleyici çalışma zamanı hatasını belirleyemez. Ancak, kodun yürütülmesinden ve kodun önceden tanımlanmasından sonra düzeltebiliriz.
Çalışma Zamanı Hatası Türleri
Program yürütme sırasında karşılaşabileceğimiz birden çok çalışma zamanı hatası türü vardır. Bazı sık karşılaşılan çalışma zamanı hataları aşağıda listelenmiştir:
Veri giriş hataları : Giriş-çıkış hataları
Kullanıcı girişinin bir uygulamayı bozmasının sayısız yolu vardır.
HTML tabanlı bir yorum panosunda, masum bir şekilde kodlanmamış küçüktür (<) veya büyüktür işareti (>) göndermesine izin verilen bir kullanıcı, o web sayfasının işlenme yeteneğini tamamen mahvetme potansiyeline sahiptir. Benzer şekilde, tüm girdileri ASCII biçiminde beklemek üzere oluşturulmuş metin işleme sistemleri, emoji veya standart olmayan karakter girdileri alırlarsa zamanından önce sonlandırılabilir.
Daha kötüsü, bilgisayar korsanlarının en sevdiği saldırı vektörü , aksi takdirde zararsız olacak bir giriş alanı içinde zararlı bir yürütülebilir veritabanı sorgusunu gizleyen SQL enjeksiyonudur . Bu, yalnızca bir uygulamanın başarısız olmasına neden olmakla kalmaz, aynı zamanda potansiyel olarak tüm veri katmanının kontrolünü teslim eder.
Girdi temizleme işlemi veya veri temizleme işlemi , uygulamalara potansiyel olarak girilebilecek geniş veri yelpazesini, bir programın kavradığı güvenli bir değerler aralığına dönüştürür. Bu tür kitaplıkların kullanılması, giriş temizleme hatalarından kaynaklanan çalışma zamanı hatalarının azaltılmasına yardımcı olur.
Apache BVal ve Hibernate Validator gibi popüler Java çerçeveleri, basit, açıklama tabanlı giriş temizliği gerçekleştirir ve herhangi bir Java tabanlı uygulamaya kolayca entegre olur.
Kötü uygulanmış mantık
Kodun derlenmesi, düzgün çalıştığı anlamına gelmez. Kod genellikle bir uygulamanın çalışma zamanında başarısız olmasına neden olan mantıksal sorunlar içerir.
Java, RuntimeException veya denetlenmeyen özel durum adı verilen, kodla ilgili yaygın çalışma zamanı hataları sınıfını işlemek için yerleşik bir yapı içerir. Java 17, yalnızca SDK'da bu tür 78 hatayı tanımlar ve diğer projeler ve çerçeveler ayrıca kendi RuntimeException hatalarını tanımlar.
- Çalışma zamanı istisnası
- ArrayIndexOutOfBoundİstisna
- ConcurrentModificationException
- ClassCastException
- …
En azından her uygulama, tüm olası RuntimeException'ı yakalayabilen, hatayı günlüğe kaydedebilen ve tüm uygulamayı iptal etmek yerine sorunlu yürütme iş parçacığının ölmesine izin verebilen genel bir istisna koşum takımı içermelidir.
Yetersiz çalışma zamanı kaynakları
Yazılım geliştiriciler, meydana gelen her tür çalışma zamanı hatasının sorumluluğunu üstlenmezler. Java'daki birçok çalışma zamanı hatası, temel alınan altyapıdaki sorunlardan kaynaklanan kaynak sınırlamaları içerir. Örnekler şunları içerir: ağ zaman aşımları, yetersiz bellek koşulları, CPU'nun aşırı kullanımı veya işlemcide bir iş parçacığını programlayamama.
Kaynakla ilgili çalışma zamanı hatalarından kaçınmanın bir yolu, bir uygulamanın CI/CD işlem hattında JMeter veya LoadRunner gibi bir yük testi aracı kullanmaktır. Bu araçlar olası bir performans sorunu algılarsa, uygulamayı üretim dağıtımına doğru ilerlemeden önce durdurabilirler.
Bazı uygulamaların yükü büyük ölçüde değişir. Örneğin, bir finansal hizmetler uygulaması çoğu zaman sabit bir yük görebilir, ancak işlem gününün sonunda aşırı derecede meşgul olabilir. Bir vergi hizmeti, son başvuru tarihinden önce en yüksek yüke ulaşabilir, ancak yılın geri kalanında nispeten az yüke sahip olabilir.
DevOps ekipleri, kaynaklarla ilgili çalışma zamanı hatalarını önceden algılamak ve azaltmak için performans ölçümlerini araçlarla izlemelidir. Bu tür araçlara örnek olarak JDK Flight Recorder ve Java Mission Control verilebilir .
Tamamen öngörülemeyen iş yüklerine sahip uygulamalar için, kaynakları esnek bir şekilde tahsis etmek üzere bulut tabanlı yük dengeleme teknolojisini kullanın. Bu, hem eksik tahsis edilen kaynakları hem de pahalı, nadiren kullanılan donanımları satın alma tuzağını ortadan kaldırır.
Dış kaynak yapılandırması
Kurumsal uygulamalar nadiren yalıtılmış bir balonda bulunur. Genellikle NoSQL veritabanları ve ilişkisel sistemlerden Kafka sıralarına ve RESTful API'lere kadar her şeyle etkileşime girerler. Ne yazık ki, uygulamanız gerekli harici bir sisteme bağlanamıyorsa, bu kaçınılmaz olarak bir çalışma zamanı hatasıyla sonuçlanır.
Çağıran programa karşılık gelen güncelleme olmadan aşağıdaki durumlardan herhangi biri meydana gelirse, bir dış kaynak bir çalışma zamanı hatasına neden olabilir:
- bir IP adresi değişir;
- kimlik bilgileri değişir;
- güvenlik duvarı yapılandırma değişikliği; veya
- harici sistem bakım için kapanır.
Buna bağlı olarak, kaos mühendisliği araçları, bir uygulamanın bağlı olduğu süreçleri rastgele sonlandırır. Bu tür araçlar, geliştiricileri harici sistemler arızalandığında bile duyarlı ve esnek kalan kod yazmaya zorlar.
Dış kaynaklarla ilgili temel sorun, geliştiricilerin bunları kontrol edememesidir - ancak bu dış kaynaklar başarısız olduğunda bir uygulamanın nasıl yanıt vereceğini kontrol edebilirler. Kontrol etmediğiniz sistemler tarafından oluşturulan çalışma zamanı hatalarını tahmin edin ve bu harici sistemler arızalandığında zarif bir şekilde yanıt veren uygulamalar yazın.
Üçüncü taraf kitaplık güvenlik açıkları
Önemsiz olmayan herhangi bir kurumsal uygulama, günlük kaydı, izleme, giriş doğrulama, form işleme ve daha fazlası gibi işlevleri gerçekleştirmek için üçüncü taraf kitaplıklara düzinelerce bağımlılık içerir.
Ne yazık ki, üçüncü taraf bir kitaplıktaki herhangi bir hata, dağıttığınız uygulamada bir hata haline gelir. Aralık 2021'de yaygın olarak kullanılan Log4j 2 kitaplığındaki bir LDAP enjeksiyon kusuru, dünya çapındaki JVM'leri çevrimdışı olmaya zorladığından, bu durum Java dünyası için rahatsız edici bir şekilde gerçek oldu .
Yazılım bağımlılıklarının uygulamalara çalışma zamanı hataları getirme olasılığını azaltmanın bir yolu, yalnızca Apache veya Eclipse gibi kuruluşların güvenilir kitaplıklarını kullanmaktır .
Diğer bir koruyucu önlem, bir uygulamanın bağımlılıklarını, güncellemeler kullanılabilir olur olmaz düzenli olarak en son sürüme güncellemektir.
Son olarak, birincil bağımlılıklarınızın dayandığı ikincil veya üçüncül bağımlılıkların farkında olun ve bunların beraberinde getirdiği risklerin farkında olun.
Yazılım geliştirme dünyasında "mükemmel", "bitti"nin düşmanıdır. Hiçbir program, beklenmedik çalışma zamanı hatası tehdidinden muaf değildir. Bununla birlikte, kurumsal geliştiriciler olası nedenler konusunda farkındalıklarını artırdıklarında ve potansiyel tehditlere karşı önlem almak için adımlar attıklarında, çalışma zamanı hatasıyla karşılaşma olasılığını en aza indiren yazılımlar oluşturabilirler.
Çalışma zamanı hatası nasıl görünür?
Tebrikler! Komut isteminiz şöyle görünüyorsa:
Ardından, programınızı başarıyla Java bayt koduna derlediniz, yani kodunuzla ilgili herhangi bir sözdizimsel sorun olmadı! Ancak, dosya adından da anlaşılacağı gibi, bu programı çalıştırdığımızda:
Şimdi bir çalışma zamanı hatasıyla karşılaştık. Çalışma zamanı hataları genellikle kodunuzla ilgili mantıksal olarak yanlış bir şey olduğunda ortaya çıkar. Bu belge, çalışma zamanı hatalarının nasıl okunacağını ve düzeltileceğini açıklayacaktır.
İşte çalışma zamanı hatasının ana bölümleri
"Main" iş parçacığında istisna : Bu bölüm, çoğu çalışma zamanı hatası için görünür. Size sadece istisnanın her zaman olması gereken ana yöntemde meydana geldiğini söyler.
java.lang.ArrayIndexOutOfBoundsException: 5 : Oluşan hata budur. Hatanın adı genellikle size ne olmuş olabileceği hakkında bir fikir verir. Bu durumda, dizilerle ilgilendiğini ve bir dizi için ayrılan alanın dışına çıktığını biliyoruz.
at RunTimeErrors.main(RunTimeErrors.java:10) : Buna, hata oluştuğunda yürütülen yöntemlerin listesini söyleyen yığın izleme adı verilir.
- RunTimeErrors.main bize bu hatanın RunTimeErrors sınıfının ana yönteminde oluştuğunu söyler.
- RunTimeErrors.java:10 bize bunun hangi dosyada olduğunu ve hangi satırda olduğunu söyler. Bu durumda, bu bizim ana sınıfımızda 10. satırda gerçekleşti .
Bazen, genellikle IllegalArgumentException ile çalışırken sistem bunu tek başına yapamıyorsa, bir çalışma zamanı istisnası atıp atmayacağınıza karar vermek için bir kontrol gerçekleştirmeniz gerekir, ancak çoğu zaman bir kontrol yapmanız gerekmez çünkü bu, Java'nın sizin için gerçekleştirdiği standart çalışma zamanı denetimi.
NullPointerException'ı örnek olarak alalım :
if(t == null)
throw new NullPointerException();
if(t != null) {
// work with t reference
}
Çalışma Zamanı istisnalarını yakalamadığınızda ne olur? Derleyici bunlar için istisna belirtimlerini zorlamadığından, bir RuntimeException'ın yakalanmadan main() yönteminize kadar sızması oldukça olasıdır. Bu durumda ne olduğunu görmek için aşağıdaki örneği deneyin:
//: exceptions/NeverCaught.java
// Ignoring RuntimeExceptions.
// {ThrowsException}
public class NeverCaught {
static void f() {
throw new RuntimeException("From f()");
}
static void g() {
f();
}
public static void main(String[] args) {
g();
}
} ///:~
Exception in thread "main" Java.lang.RuntimeException: From f()
at NeverCaught.f(NeverCaught.Java:7)
at NeverCaught.g(NeverCaught.Java:10)
at NeverCaught.main(NeverCaught.Java:13)
Derleyici, kontrol edilen tüm istisnaların işlenmesini dikkatli bir şekilde zorunlu kıldığından, kodlamanızda yalnızca RuntimeException (ve alt sınıflar) türündeki istisnaların göz ardı edilebileceğini unutmayın . Bunun nedeni, bir RuntimeException'ın bir programlama hatasını temsil etmesidir, bu da:
Tahmin edemeyeceğiniz bir hata. Örneğin, kontrolünüz dışında olan boş bir referans.
Bir programcı olarak kodunuzda kontrol etmiş olmanız gereken bir hata ( dizinin boyutuna dikkat etmeniz gereken ArraylndexOutOfBoundsException gibi). 1. noktadan meydana gelen bir istisna, genellikle nokta için bir sorun haline gelir
Hata ayıklama sürecine yardımcı olduklarından, bu durumda istisnalara sahip olmanın ne kadar büyük bir fayda sağladığını görebilirsiniz.
Java istisna işlemeyi tek amaçlı bir araç olarak sınıflandıramayacağınızı fark etmek ilginçtir. Evet, kodunuzun kontrolü dışındaki güçler nedeniyle oluşacak can sıkıcı çalışma zamanı hatalarını işlemek için tasarlanmıştır , ancak derleyicinin algılayamadığı belirli programlama hataları türleri için de önemlidir.
Çalışma Zamanı Hatası Örneği
public class Temp {
public static void main(String[] args) {
Temp t = initT();
t.foo("Hi");
}
private static Temp initT() {
return null;
}
public void foo(String s) {
System.out.println(s.toLowerCase());
}
}
Exception in thread "main" java.lang.NullPointerException
at Temp.main(Temp.java:7)
Bu kategoride yer alan bir grup istisna türü vardır. Java tarafından her zaman otomatik olarak atılırlar ve bunları istisna belirtimlerinize dahil etmeniz gerekmez. Yeterince elverişli bir şekilde, hepsi, kalıtımın mükemmel bir örneği olan RuntimeException adlı tek bir temel sınıf altına konularak gruplandırılır : Bazı özellikleri ve ortak davranışları olan bir türler ailesi oluşturur. Ayrıca, bir yöntemin bir RuntimeException (veya RuntimeException öğesinden devralınan herhangi bir tür ) atabileceğini söyleyen bir istisna belirtimi yazmanız gerekmez çünkü bunlar denetlenmeyen istisnalardır. Hataları gösterdikleri için genellikle bir RuntimeException yakalamazsınız.— otomatik olarak halledilir. RuntimeExceptions olup olmadığını kontrol etmek zorunda kalırsanız , kodunuz çok dağınık olabilir. Genellikle RuntimeExceptions'ı yakalamasanız da , kendi paketlerinizde RuntimeExceptions'ın bazılarını atmayı seçebilirsiniz .
En Yaygın Çalışma Zamanı İstisnalarını Görün
Mutlu öğrenmeler
Mouad Oumous Java WhatsApp Grubuna Katılın
Mouad Oumous Telegram Kanalına Katılın
Yayınımızı takip ederek destek olun
Spring Boot ile GraphQL En Yaygın Java Çalışma Zamanı Hataları Spring Boot'a Başlarken: Yeni Başlayanlar İçin Kapsamlı Bir Öğretici Yaşam Kalitenizi Artırmanın 10 Basit Ama Etkili Yolu En Sık Sorulan Java8 Akışına Dayalı Mülakat Sorusu — Son Bölüm I Kitap Yazarak 300 Dolar Kazanın 2 Günde — İşte Java'da İstisna Zincirleme Nedir | İstisna İşleme Veritabanı Entegrasyonu ile Basit Bir Quarkus Projesi Nasıl Oluşturulur
![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































