Skip to content

Latest commit

 

History

History
56 lines (47 loc) · 4.24 KB

README.md

File metadata and controls

56 lines (47 loc) · 4.24 KB

Effective Java kitabından aldığım notlar

  • Consturtorlar yerine static factory methodları tercih edilebilir.

  • Static factory methodları Constructorların aksine her çağırıldığında yeni bir instance oluşturması gerekmez.

  • Çok sayıda parametreyle karşılaştığınızda builder kullanın.

  • Üst üste Consturtorlar oluşturmamak için Builder kullanılabilir(Telescope Patterndan kaçınmak).

  • Singleton sınıfları private yapıcı metot veya enum türüyle güçlendirin.

  • Utility sınıflar projede bir çok yerde kullanacağımız metodları barındırır metodları static işaretlenir.

  • Utility sınıflardan nesne oluşturulması uygun görülmez. Bir sınıfın nesnesini oluşturmayı engellemek isterek boş bir private constructor tanımlayabiliriz.

  • Utility sınıfları abstract yapmayın. Abstract sınıfın nesnesi oluşturulamaz fakat extend eden bir alt sınıfın nesnesini oluşturabilirsiniz buda bizi yanlış yönlendirebilir.

  • Bağımlılıkları kendimiz yaratmak yerine Dependency Injection kullanırız. Sigletondan daha kolay ve efektif.

  • Gereksiz nesne yaratmaktan kaçınılmalıdır. Örneğin: String c = new String("abc"); -- String d = new String("abc"); -- System.out.println(c == d); // False döner

  • Equals() iki nesnenin referansının aynı olup olmadığını kontrol eder.

  • Bir anlaşma olarak equals metodunun override edildiği her sınıftta hashCode metodu da override edilmelidir.

  • Sadece equals metodunu override edersem nesnelerim equals metodu ile eşit görünse de hash kod değerleri farklı olacak.

  • Sadece hashCode metodunu override edersem nesnelerim aynı hash code değerine sahip olmasına rağmen equals metodu bu 2 nesnesin farklı olduğunu söyleyecek.

  • toString() metodu Object sınıfında tanımlanmış bir metottur ve nesnelerin metin karşılıklarını ekrana yazmak için kullanılır. Eğer nesnelerin metinsel bir karşılığı yoksa nesnenin hafızadaki adresini döndürür.

  • toString() kullanılmamış bir sınıfda objenin çıktısı hashCode un hexadecimal karşılığında gösterimi olur.

  • Comparable interfacei sınıfın instancelerini bir sıraya sokabiliyor, kıyaslayabiliyor hale getiriyor.

  • Comparable interfacesini uygulayarak, sınıfınızın nesneleri arasında sıralama yapılabileceğini belirtmiş olursunuz. Bu arayüzü uygulayan nesnelerden oluşan bir diziyi sıralamak çok kolaydır.

  • Sınıf final ise sınıf extend edilemez.(immutable)

  • Method final ise override edilemez.(immutable)

  • public static final String c="c"; //başka sınıftan erişilebilir fakat değeri değiştirleme (immutable)

  • private static String b="b";//private static i ezemez yine sadece bulunduğu sınıf tarafından erişilebilir.

  • Protected: aynı paket içerisinden ve extend yada implement edildiği sınıfdan erişilir.

  Encapsulation veriyi kontrollü tutmamızı sağlar.

  1- Doğrudan erişilebilirlik kalkar(get set ile dolaylı erişim)

  2- Set ile verilerimde kontrol sağlayabliyorum.

  3- Read only (set kaldırmak istenirse)

  4- Write only(get kaldırmak istenirse)
  • Bir nesne oluşturulduğunda o nesnenin değerini değiştirebiliyorsanız Mutable değiştiremiyorsanız Immutable.
  • Abstract sınıfların abstract metodları implement edilmek zorundadır.
  • Bir classa abstract metod yazıyosak bulunduğu classında abstract olması gerekli.
  • Abstract classlar ise objenin karakteristik özelliklerini barındırır daha çok.
  • Interfaceler özellikleri temsil eder, neler yapabileceğini söyler.
  • Interface'e yazılan bütün metodlar override edilmek zorundadır ve metodun içi boş bırakılır override edildiği yerde doldurulur.
  • default isaretlenirse override edilme zorunlulugu yok fakat child classslarda kullanılabilir.
  • Ham (raw) türleri kullanılmamalı.
  • Stream nedir? -> Java8 + sıralı paralel toplu işlemleri kolaylaştırmak için gelmiştir.
  • Generic method compile time da tip güvenliği,autoboxing unboxing gibi cast operasyonlarının önüne geçmemizi ,daha esnek bir yapı sağlıyor.
  • Listeleri dizilere tercih edin.
  • Lambda : kendi başına tanımlanabilen , parametre kabul eden ve döndürülebilen fonksiyondur.
  • Metot referanslarını lambdalara tercih edin
  • Klasik for döngüleri yerine for-each tercih edilmeli.