İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Java "java.lang.IllegalArgumentException" Hatası Nasıl Çözülür?

java-illegalargumentexception-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. Kısa cevap: IllegalArgumentException ne anlama gelir?
  2. Stack trace ile sorunlu argüman nasıl bulunur?
  3. Hangi değerler hatayı doğurur ve nasıl düzeltilir?
  4. Çalışan örnek ve son kontrol listesi

java illegalargumentexception hatası, bir metot veya kurucuya gönderilen argümanın türü kabul edilse bile değeri kullanım koşullarına uymadığında ortaya çıkar. Çözüm için önce stack trace içindeki kendi koduna ait satırı bulmalı, ardından ilgili argümanın türünü, değerini ve metot tarafından beklenen koşulları incelemelisin.

Hatanın adı tek başına hangi değerin sorunlu olduğunu göstermez. İstisna mesajı, stack trace ve çağrı anındaki değişken değerleri birlikte değerlendirildiğinde geçersiz argüman daha kolay bulunur.

Kısa cevap: IllegalArgumentException ne anlama gelir?

Kısa cevap: IllegalArgumentException ne anlama gelir?

IllegalArgumentException, bir metoda veya kurucuya gönderilen argümanın beklenen türle uyumlu olmasına rağmen, o kullanım için geçerli kabul edilmediğini anlatır. Sorun belirli bir değerle, değer aralığıyla, biçimle veya mevcut durumla ilgili olabilir.

Java, yanlış türde bir argümanı çoğu durumda derleme aşamasında yakalar. Örneğin int bekleyen bir metoda String göndermek derlenmez. Buna karşılık int türündeki -1 değeri metoda gönderilebilir; ancak metot negatif değerleri kabul etmiyorsa çalışma anında IllegalArgumentException fırlatabilir.

IllegalArgumentException, türün değil, metoda gönderilen değerin o kullanım için uygun olmadığını anlatır.

Aynı mantık kurucular için de geçerlidir. Bir kurucu, tür bakımından doğru görünen bir argümanı belirli bir aralıkta, biçimde veya durumda bekleyebilir. Bu nedenle hatayı çözerken yalnızca değişkenin türüne değil, metot sözleşmesinde belirtilen kabul koşullarına da bakmalısın.

Stack trace ile sorunlu argüman nasıl bulunur?

Stack trace, istisnanın oluştuğu noktadan çağrı zincirinin başlangıcına doğru ilerleyen teknik kayıttır. İncelemeye istisna adı ve mesajından başla, sonra kendi sınıfına veya paketine ait ilk anlamlı satırı bul.

  1. İstisna adını ve mesajını oku. IllegalArgumentException hangi tür problemin yaşandığını belirtir. Mesajda beklenen aralık, biçim veya koşul yazıyorsa bunu not et.
  2. Kendi kodundaki ilk anlamlı satırı bul. Stack trace’in üst kısmında kütüphane satırları bulunabilir. Kendi sınıfına ait ilk satır, genellikle geçersiz değerin fark edildiği veya istisnanın fırlatıldığı noktadır.
  3. Çağrılan metodu ve argümanı incele. Satırdaki metot ya da kurucuyu belirle. Argümanın o anda aldığı gerçek değeri, dönüşümden geçip geçmediğini ve çağrıdan önce değiştirilip değiştirilmediğini kontrol et.

Teşhisi üç soruyla daraltabilirsin:

  1. Tür bekleniyor mu? Metot imzasındaki parametre türü ile gönderilen değer uyumlu mu?
  2. Değer kabul ediliyor mu? Tür doğru olsa bile metot bu özel değeri kabul ediyor mu?
  3. Aralık, biçim veya durum koşulu sağlanıyor mu? Değerin sınırlar, metin biçimi ya da nesnenin mevcut durumu bakımından ek bir koşulu var mı?

Aşağıdaki çağrı zincirinde main, saveScore metodunu çağırır. saveScore ise aldığı metni sayıya dönüştürüp setPercentage metoduna gönderir:

public class Demo {
    static void setPercentage(int value) {
        if (value < 0 || value > 100) {
            throw new IllegalArgumentException("0-100 arası değer bekleniyor");
        }
    }

    static void saveScore(String text) {
        int score = Integer.parseInt(text);
        setPercentage(score);
    }

    public static void main(String[] args) {
        saveScore("140");
    }
}

Bu kod çalıştırıldığında stack trace’in ilgili bölümü şöyle görünebilir:

Exception in thread "main" java.lang.IllegalArgumentException: 0-100 arası değer bekleniyor
    at Demo.setPercentage(Demo.java:4)
    at Demo.saveScore(Demo.java:10)
    at Demo.main(Demo.java:14)

İlk anlamlı satır Demo.setPercentage(Demo.java:4) satırıdır. İstisna burada fırlatılmıştır. saveScore ve main satırları ise bu noktaya nasıl gelindiğini gösterir. "140" geçerli bir metin olarak alınmış, int değerine dönüştürülmüş ve metoda gönderilmiştir. Bu yüzden tür uyumludur; fakat değer 0-100 aralığını aşar.

Yalnızca son satıra bakmak, seni çağrının başlangıcı olan main metoduna götürür. Yalnızca istisna adına bakmak ise problemin geçersiz argüman olduğunu söyler, fakat hangi argümanın neden reddedildiğini açıklamaz. Satır, çağrı zinciri ve çalışma anındaki değer birlikte incelenmelidir.

Hangi değerler hatayı doğurur ve nasıl düzeltilir?

Hangi değerler hatayı doğurur ve nasıl düzeltilir?

java illegalargumentexception hatası, bir metoda gönderilen argümanın o metodun kabul ettiği kurala uymadığını gösterir. Ancak boş metin veya negatif sayı her çağrıda otomatik olarak bu hatayı üretmez. Değerin geçerli olup olmadığı, çağrılan metodun sözleşmesine ve belgelenmiş ön koşullarına bağlıdır. İlk adım, stack trace içinde gerçek istisna adını ve hatanın oluştuğu satırı doğrulamaktır. Görünen sorun farklı bir istismadan kaynaklanıyorsa çözüm yaklaşımı da değişir.

Durum Hatanın oluştuğu özel koşul Kontrol ve düzeltme yaklaşımı
Sayı aralığı dışında kalan değer Metot yalnızca 0 ile 100 arasındaki bir puanı kabul ederken 101 gönderilir. Alt ve üst sınırı çağrıdan önce kontrol et. Geçersiz değeri düzelt veya beklenen aralığı açıklayan anlamlı bir hata mesajı üret.
Sözleşmenin kabul etmediği negatif değer Negatif değeri reddeden bir adet ya da süre parametresine -3 gönderilir. Negatif değer kontrolünü ilgili alanın kuralına göre yap. Her negatif sayıyı otomatik olarak geçersiz kabul etme.
Boş metin Metodun zorunlu bir metin beklediği ve boş metni açıkça kabul etmediği durumda "" gönderilir. Boşluk ve boş metin kontrollerini metodun sözleşmesine göre uygula. Gerekliyse kullanıcıdan yeniden veri iste.
Enum sabitiyle eşleşmeyen ifade Enum.valueOf gibi bir çağrıya, enum içinde bulunmayan veya beklenen biçimle eşleşmeyen bir ifade verilir. Geçerli sabitleri kontrol et. Büyük ve küçük harf dönüşümünü yalnızca uygulamanın kuralı izin veriyorsa kullan.
Beklenen biçime uymayan veri Tam sayı bekleyen bir dönüştürme işlemine 12.5 veya abc gibi bir metin gönderilir. Girdiyi dönüştürmeden önce biçim ve tür açısından doğrula. Hata mesajında beklenen biçimi açıkça belirt.
Hazır metodun ön koşulunun karşılanmaması Bir hazır metot, belirli bir aralık, biçim veya durum ön koşulu tanımladığı hâlde çağrı bu koşula uymaz. Metodun dokümantasyonunu ve parametre açıklamalarını oku. Ön koşulu çağrıdan önce kontrol ederek hatayı daha anlaşılır bir noktada ele al.

Java temellerindeki koşul, argüman ve hata ayıklama bilgini ölçmek için Java bilgi testini kullanabilirsin. Test sonucu hangi konularda tekrar yapman gerektiğini belirlemene yardımcı olabilir.

Çalışan örnek ve son kontrol listesi

Aşağıdaki metot, puanın 0 ile 100 arasında olmasını denetler. 105 değeri için anlamlı bir IllegalArgumentException fırlatılır ve yalnızca bu istisna yakalanır. 85 değeri ise geçerli olduğu için normal biçimde işlenir.

public class PuanKontrolu {
    static int puaniDogrula(int puan) {
        if (puan < 0 || puan > 100) {
            throw new IllegalArgumentException(
                "Puan 0 ile 100 arasında olmalıdır: " + puan
            );
        }
        return puan;
    }

    public static void main(String[] args) {
        try {
            puaniDogrula(105);
        } catch (IllegalArgumentException e) {
            System.out.println("Hata: " + e.getMessage());
        }

        int gecerliPuan = puaniDogrula(85);
        System.out.println("Geçerli puan: " + gecerliPuan);
    }
}

Beklenen çıktı:

Hata: Puan 0 ile 100 arasında olmalıdır: 105
Geçerli puan: 85

Bu örnekte 0 ve 100 sınırları geçerli kabul edilmiştir. Yaş, adet veya başka bir alan için aynı yaklaşımı kullanırken alt ve üst sınırların dahil olup olmadığını o alanın sözleşmesine göre belirle. try bloğunu yalnızca hatayı üretmesi beklenen çağrıyı kapsayacak kadar dar tutmak, gerçek sorunu gizlemeyi önler.

Kendi kodundaki örnekleri adım adım incelemek ve kişiye özel hata ayıklama pratiği yapmak için Java Özel Ders programı sayfasındaki birebir çalışma yapısını inceleyebilirsin.

Son kontrol listesi

  1. Kullanıcı girdisini sistem sınırında doğrula ve geçersiz değeri uygulamanın daha derin katmanlarına taşımamaya çalış.
  2. Çağırdığın metodun sözleşmesini ve belgelenmiş ön koşullarını oku. Boş metin veya negatif sayı hakkında varsayım yapma.
  3. Stack trace içinde kendi sınıfındaki satırı bul ve istisnanın gerçekten hangi çağrıda oluştuğunu belirle.
  4. Argümanın çalışma anındaki gerçek değerini kontrol et; yalnızca değişken adına bakma.
  5. İstisna fırlatıyorsan beklenen aralığı veya biçimi açıklayan anlamlı bir mesaj yaz.
  6. Alt sınırı, üst sınırı, sınırların hemen dışındaki değerleri ve geçerli bir örneği ayrı ayrı dene.
  7. Sorunu gizlememek için gereksiz geniş catch (Exception e) kullanma. Yalnızca gerçekten ele alabileceğin istisnayı yakala.

Özetle, bu hatayı çözmenin en güvenilir yolu değeri tahmin etmek değil, metodun sözleşmesini, gerçek argümanı ve stack trace bilgisini birlikte incelemektir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara