Hoşgeldin Misafir

Java’da En Çok Yapılan 10 Hata ve %100 Çözümleri

hakantopuzoglu

25 May 2018
2,239 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Java’da En Çok Yapılan 10 Hata ve %100 Çözümleri

Herkese Merhaba,
Java, yıllardır kurumsal yazılım dünyasının en güçlü dillerinden biri.
Ama güçlü olması, hata yapılmayacağı anlamına gelmiyor.

Bu yazıda Java geliştiricilerinin en sık yaptığı 10 hatayı ve bu hataların net çözümlerini sade, öğretici ve pratik şekilde anlatacağım.

VT9Dd3g.png


1) NullPointerException Hatası


Java’da en klasik hatalardan biridir.
Bir nesne oluşturulmadan kullanılmaya çalışılırsa ortaya çıkar.

Çözüm:
Nesneyi kullanmadan önce null kontrolü yapılmalı.

if(user != null) { user.getName(); }

Daha modern çözüm:
Optional<User> user = Optional.ofNullable(getUser());

Kural: Null kontrolü yoksa sistem her an patlayabilir.

2) Gereksiz Static Kullanımı


Her şeyi static yapmak kodu kısa gösterir ama mimariyi bozar.
Test yazmayı zorlaştırır, bağımlılıkları artırır.

Çözüm:
Static sadece gerçekten ortak ve değişmeyen yapılar için kullanılmalı.

Yanlış:
static UserService service;

Doğru:
private final UserService service;

3) Exception Yakalamayı Boş Bırakmak


En tehlikeli hatalardan biri budur.

Yanlış:
catch(Exception e) { }

Bu kullanım hatayı gizler, sistem sessizce bozulur.

Çözüm:
Hata mutlaka loglanmalı veya anlamlı şekilde yönetilmeli.

catch(Exception e) {
log.error("İşlem sırasında hata oluştu", e);
}

4) String Birleştirmede + Kullanmak


Döngü içinde String birleştirmek performansı düşürür.

Yanlış:
text += value;

Çözüm:
StringBuilder kullanılmalı.

StringBuilder sb = new StringBuilder();
sb.append(value);

Özellikle büyük veri işlemlerinde fark ciddi olur.

5) equals Yerine == Kullanmak


Java’da == referans karşılaştırır.
String veya nesne içeriği karşılaştırmak için equals gerekir.

Yanlış:
if(name == "admin")

Doğru:
if("admin".equals(name))

Ekstra avantaj:
Bu kullanım NullPointerException riskini de azaltır.

6) Collection Seçimini Yanlış Yapmak


Her liste ArrayList değildir.
Her veri de HashMap’e atılmaz.

Doğru seçim:
- ArrayList → Sıralı veri
- HashSet → Tekrarsız veri
- HashMap → Anahtar/değer yapısı
- LinkedList → Sık ekleme/silme işlemi

Kural: Veri yapısı yanlışsa performans da yanlış olur.

7) Resource Kapatmayı Unutmak


Dosya, bağlantı veya stream açılıp kapatılmazsa bellek ve kaynak sızıntısı oluşur.

Yanlış:
FileInputStream fis = new FileInputStream("data.txt");

Çözüm:
try-with-resources kullanılmalı.

try(FileInputStream fis = new FileInputStream("data.txt")) {
// işlemler
}

Java kaynağı otomatik kapatır.

8) Thread Güvenliğini Görmezden Gelmek


Çoklu thread kullanılan projelerde ortak değişkenler kontrolsüz kullanılırsa veri bozulur.

Çözüm:
Thread-safe yapılar kullanılmalı.

ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();

Gerekirse synchronized, AtomicInteger veya Lock yapıları tercih edilmeli.

9) Kodun Her Yerine Business Logic Yazmak


Controller içine iş mantığı yazmak projeyi zamanla çöplüğe çevirir.

Yanlış yapı:
Controller → SQL → Hesaplama → Response

Doğru yapı:
Controller → Service → Repository

Bu sayede kod:
- Daha okunur olur
- Daha kolay test edilir
- Daha kolay büyür

10) Log Yerine System.out.println Kullanmak


System.out.println geliştirme sırasında işe yarar ama gerçek projede yetersizdir.

Çözüm:
Logger kullanılmalı.

private static final Logger log = LoggerFactory.getLogger(UserService.class);

log.info("Kullanıcı işlemi başladı");

Log seviyesi kullan:
- info
- warn
- error
- debug

Bonus: Temiz Java Yazmak İçin Altın Kurallar


1) Küçük metot yaz
Bir metot tek iş yapsın.

2) Anlamlı isim kullan
x, data, temp yerine açıklayıcı isimler tercih et.

3) Kod tekrarı yapma
Aynı kod 2 defa yazılıyorsa refactor zamanı gelmiştir.

4) Test yazmayı ihmal etme
JUnit ve Mockito öğrenmek Java geliştiricisi için şarttır.

Sonuç olarak;


Java’da yapılan hataların çoğu dilin zorluğundan değil,
yanlış alışkanlıklardan kaynaklanır.

Eğer:
Null kontrolü yaparsan, doğru collection seçersen, exception yönetimini ciddiye alırsan ve temiz mimari kurarsan
Java projelerin çok daha sağlam, hızlı ve yönetilebilir olur.

Unutma:
İyi Java kodu sadece çalışan kod değil, yıllar sonra da okunabilen koddur.

Sorularınız varsa yorumlarda konuşuruz, yardımcı olurum. 🤝



LOJİSTİK TİM SUNDU

btn1pyf.png