26 Mart 2013 Salı

YAPILANDIRICILAR(CONTRUCTORS)

Bir sınıfın değişkenleri ve fonksiyonları o sınıftan nesne üretilmedikçe hiç bir anlam ifade etmezler.Zaten sınıflar bellekte yer kaplamazlar ama ne zaman ki nesne oluşturulur nesneler hemen bellekte yer edinirler.Peki nesnemizi oluşturduk sizce o sınıftan çağrılan ilk fonksiyon hangisidir?Cevabı tabi ki de yapılandırıcılardır.Yapılandırıcılar nesne oluşturulduğu an çağrılan fonksiyondur.Yani sınıfımızın olmazsa olmaz  metodudur.Belki de şimdiye kadar yazılan basit programlarınızda constructorı siz yazmadınız ama programınız hala hatasız bir şekilde çalışıyor.Bunun cevabı da şu, siz her ne kadar yapılandırıcıyı yazmasanızda , unutsanızda java derleyicisi sizin için siz farkında olmadan bir default contructor yaratır.Ama baktı ki siz yazmışsınız hiç yazma zahmetinde bulunmaz.
Yapılandırıcılarınız public olmalıdır.Eğer başka sınıflarda nesne oluşumunu engellemek istiyorsanız private yapabilirsiniz ama bu özel durumlar haricinde kullanılan bir yol değildir.
Peki yapılandırıcımız hangi özelliklere sahip olmalıdır?

  1. Sınıfla aynı adı taşımak zorundadır.
  2. Dönüş değeri yoktur.
  3. Parametreli ya da parametresiz yapılandırıcı olabilir.
Bu üç özellik bizim temel özelliklerimiz.Artık kodlama zamanııı....


package Constructor;

public class Student {
 private String name;
 private int age;
 private int no;
 //Default contructor
 public Student()
 {
  //Değişkenlerimizin default değerleridir.
  name="There  are no name";
  age=0;
  no=0;
 }
 //Non-default contructor
 public Student(String name,int age,int no)
 {
  this.name=name;
  this.age=age;
  this.no=no;
 }
 public void setname(String name)
 {
  this.name=name;
 }
 public void setage(int age)
 {
  this.age=age;
 }
 public void setno(int no)
 {

  this.no=no;
 }
 public  String printID()
 {
  return "name : "+name+"\n"+"age : "+age+"\n"+"no : "+no.
 }
}


Yukarıdaki sınıfımızın işlevi bir öğrencinin adı yaşı ve numarasını edinmektir.Default contructor,parametreli contructor ,set ve printID() fonksiyonlarım bulunmaktadır.

DEFAULT CONSTRUCTOR:
Parametre almayan contructorlardır.Fonksiyonun body kısmında sınıfın değer atamalarına isteğiniz değerleri atayabilirsiniz.(Ben en başta hiç bir ögrenci olmadığını varsayarak default olarak yukarıdaki değerleri atadım.)

NON-DEFAULT CONTRUCTORS:
Parametre alan yapılandırıcılardır.Kullanıcı nesne oluşturma anında bu değerleri de girer ve sınıfımız değişkenlerine o değerler atanır.

Programımızın main kısmı...


package Constructor;

public class Test_main {

 public static void main(String[] args) {
  
  //Default constructor çağrılır
  Student student=new Student();
  System.out.println(student.printID());
  System.out.println("**********************");
  //Set fonksiyonlar ile default değerlere yeni değerler atanır
  student.setname("Aylin");
  student.setage(21);
  student.setno(1236);
  System.out.println(student.printID());
  System.out.println("**********************");
  //Parametreli yani default olmayan contructor çağrılır
  Student student2=new Student("Anil",22,1163);
  System.out.println(student2.printID());
  }

}




Mainde önce default yapılandırıyı çağırmış olduk çünkü parametre girmedik ve böylece Student sınıfımızın değişkenlerine default yapılandırıcı oluştururken atadığımız değerler atanır.Daha sonra set fonksiyonlarla değerleri değiştirip tekrar ekrana yazdırdık.Son olarakta başka bir nesne oluşturduk ve bu sefer parametreli yapılandırıcıyı kullandık.Böylece sınıfın değişkenlerine girdiğimiz değerler atanmış oldu.

Son olarak değinmek istediğim bir konu daha var.Yapılandırıcıyı eğer parametreli yaptıysanız ve default olan yapılandırıcıyı yazmadıysanız derleyici bunun yapılandırıcısı var madem ben yazmam der.Eğer siz nesne oluştururken yukarıdaki student nesnesini oluşturduğumuz gibi yani parametre almadan oluşturursanız program default yapılandırıcı yok diye hata verir.Bu durum tam tersi içnde geçerlidir.Yani sadece default var ama siz nesne oluştururken parametre girerseniz bu seferde parametreli yapılandırıcı yok diye hata verecektir.

Yukarıdaki programımızın çıktısınız da verip yazımı sonlandırıyorum.Herkese iyi çalışmalar :)








Hiç yorum yok:

Yorum Gönder