Başlangıç durumuna getirme (Initizalition) işlemi yapılandırıcı metotlar (Constructor) tarafından gerçekleştirilir. Yapılandırıcı metotlar sınıf adı ile aynı isimde olmalıdır. Bu sayede java yapılandırıcı metodu otomatik olarak çağırabilecek ve başlangıç durumuna getirerek sınıfı kullanılabilir hale getirecektir.
Yapılandırı metotlar değer döndürmezler. Değer döndürmez ibaresi metotlardaki void ifadesine karşılık gelmemektedir. Yapılandırıcı metottan çıkılmak istenildiğinde return ifadesini kullanabilir.
public class JavaConstructor {
public JavaConstructor() {
System.out.println("Bos yapilandirici metot calisti.");
}
public JavaConstructor(int a) {
System.out.println("Deger: " + a);
}
}
Yapılandırıcı metotları da parametre tiplerine göre overloading yapabiliriz. Eğer sınıfı oluşturduktan sonra herhangi bir yapılandırıcı metot yazmazsak java o sınıf için “no-args” veya “default constructor” adı verilen varsayılan yapılandırıcı metotları çalıştıracaktır.
1. This Anahtar Sözcüğü: İçinde bulunduğu nesneye ait bir referans döndürür. Bu sayede nesneye ait global alanlara erişme fırsatı bulunur. This anahtar sözcüğü ile bir sınıfa ait birden fazla yapılandırıcı metot varsa bu yapılandırıcı metotları birbirleri arasında çağırmak içinde kullanabiliriz.
public class Personel {
private int id;
private String adSoyad;
private String email;
private String sifre;
public Personel() {
this("Caglar Telef", "caglartelef", "1234");
System.out.println("Bos yapilandirici metot calisti.");
}
public Personel(String adSoyad, String email, String sifre){
this.adSoyad = adSoyad;
this.email = email;
this.sifre = sifre;
System.out.println("Parametreli yapilandirici metot calisti.");
System.out.println("Ad-Soyad: " + adSoyad + " Email: " + email + " Sifre: " + sifre);
}
}
Eğer bu şekilde this anahtar sözcüğünü kullanacaksak aşağıdaki maddelere dikkat etmeliyiz.
- Yapılandırıcılar içerisinden this ifadesi ile her zaman başka bir yapılandırıcı çağrılabilir.
- Yapılandırıcı içerisinden, diğer bir yapılandırıcı metodu çağıracaksak her zaman ilk satırda yazmalıyız.
- Bir yapılandırıcı metot içerisinde birden fazla this ifadesi ile birden fazla yapılandırıcı metot çağrılamaz.
2. Metotların Aşırı Yüklenmesi: Aynı isme sahip birden fazla metodun olabilmesidir diyebiliriz. Bu metotların adı, geri döndürdüğü değer tipi veya void olma özelliği gibi tüm özellikleri aynıdır. Bu metotlar sadece aldığı parametre tipine ve aldığı parametre sayısına göre ayırt edilir. Bu metotlar dönüş tiplerine göre ayırt edilemezler çünkü java dönen veriyi herhangi bir nesneye atama zorunluluğu yoktur.
public void yazdır () {
System.out.println(this.toString());
}
public void yazdır (String AdSoyad){
System.out.println("Ad Soyad: " + AdSoyad);
}
Her iki metot yazdırma işlemini yapar. Fakat ikinci metot gelen AdSoyad değerini yazdırırken ilk metot sınıfın adını ve id’sini ekrana yazdırır.
3. Sınıflara Ait Statik Alanlar: Sadece global alanlara statik özelliği verilebilir. Global alanlar Statik olan global alanlar ve Nesnelere ait global alanlar olarak ikiye ayrılırlar. Statik olan global alanlar bir sınıfa ait global alanlardır ve bu sınıfa ait tüm nesneler için ortak bir bellek alanında bulunurlar. Statik alanlara sadece bir kez ilk değer ataması yapılabilir.
public class Personel {
private String adSoyad;
public static int id;
public Personel() {
}
public String getAdSoyad() {
return adSoyad;
}
public void setAdSoyad(String adSoyad) {
this.adSoyad = adSoyad;
}
public static void yazdir(Personel personel){
System.out.println("Personel Ad Soyad: "+personel.getAdSoyad()+" id: "+id);
}
}
public static void main(String[] args) {
Personel personel1=new Personel();
Personel personel2=new Personel();
Personel.id=5;
personel1.setAdSoyad("Caglar Telef");
personel2.setAdSoyad("Java");
Personel.yazdir(personel1);
Personel.yazdir(personel2);
}
run:
Personel Ad Soyad: Caglar Telef id: 5
Personel Ad Soyad: Java id: 5
BUILD SUCCESSFUL (total time: 0 seconds)
Her iki nesne içinde id 5 olarak görünmektedir. Çünkü id değişkeni statik olarak tanımlandı ve bir tane id değişkeni oluşturuldu. Oluşturulan bütün nesneler hafızada aynı alanı göstermektedirler.
4. Statik Metotlar: Statik metotlar nesnelerden bağımsızdırlar. Statik bir metodu çağırmak için nesne oluşturulmasına gerek yoktur. Statik olmayan metotlar statik metotları çağırabilirken, statik olan metotlar statik olmayan metotları çağıramazlar.
public static void yazdir (Personel personel){
System.out.println("Personel Ad Soyad: " + personel.getAdSoyad() + " id: " + id);
//yazdir();
}
public void yazdir () {
yazdir();
System.out.println(this.toString());
}
5. Statik Olma Durumları: Bir metodu statik olarak tanımlamak için “Bu metodu çağırmak için, bu metodun içerisinde bulunduğu sınıfa ait bir nesne oluşturmaya gerek var mı?” sorusuna yanıt vermemiz gereklidir.
public class Personel {
private String adSoyad;
public String getAdSoyad() {
return adSoyad;
}
public void setAdSoyad(String adSoyad) {
this.adSoyad = adSoyad;
}
public void yazdir() {
System.out.println("Personel Ad Soyad: " + this.adSoyad);
}
public static void sinifAdiYazdir() {
System.out.println("Sınıf Adı: Personel");
}
}
yazdir() metodu statik olamaz çünkü personel sınıfında adSoyad özelliğine ihtiyaç duymaktadır. Fakat sinifAdiYazdir() metodu Personel sınıfından herhangi bir özelliğe ihtiyaç duymamaktadır. sinifAdiYazdir() metodu statik olarak tanımlanabilir.
Sonuç olarak eğer bir metot nesnenin durumuna ilişkin bir misyon yükleniyorsa o metodu nesne metodu olarak tanımlamamız gerekmektedir. Ancak metot nesnenin durumuna ilişkin bir misyon yüklenmemiş ve genel geçer, atomik işlemler(toplama,çıkarma işlemi,büyük harf veya küçük harfe çevirme) yapıyorsa ve sıklıkla kullanılacaksa statik olarak tanımlanabilir.
6. finalize() Metodu: Çöp toplayıcı (Garbage Collector) bir nesneyi bellekten silmeden hemen önce o nesneye ait finalize() metodunu çağırır ve o nesne ile ilgili yapılması gereken son işlemleri yapar.
public class Personel {
int i = 0;
Personel(int id) {
this.i = id;
System.out.println(i + ". Personel eklendi.");
}
public void finalize() {
System.out.println(i + ". Personel siliniyor.");
}
}
public static void main (String[]args){
for (int i = 1; i < 10; i++) {
Personel personel1 = new Personel(i);
}
System.gc();//Garbage Collector çağırdık.
for (int i = 11; i < 21; i++) {
Personel personel1 = new Personel(i);
}
}
İyi çalışmalar bol Javalı günler 🙂