Java Constructor Nedir?
Java’da bir sınıfın yapıcı metodu olarak da bilinen constructor, bir nesne oluşturulduğunda otomatik olarak çağrılan özel bir metottur. Yapıcı metotlar, nesne oluşturulmadan önce sınıfın özelliklerinin ve durumunun tanımlanmasına izin verir ve sınıfın farklı özelliklerini ve davranışlarını başlatır.
Bir constructor, sınıfın adıyla aynı isme sahip bir metottur ve dönüş türü yoktur. Java’da bir sınıfın birden fazla yapıcı metodu olabilir. Ancak, yapıcı metotların imzaları farklı olmalıdır, yani farklı parametreler almalıdırlar.
Aşağıda, farklı yapıcı metodları örneklendiren basit bir “Person” sınıfı verilmiştir:
public class Person {
private String name;
private int age;
public Person() {
this.name = "Unknown";
this.age = 0;
}
public Person(String name) {
this.name = name;
this.age = 0;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter ve Setter metotları buraya yazılır...
}
Bu sınıf, “name” ve “age” adında iki özellik içerir. Bu özellikler, yapıcı metodlar tarafından başlatılır ve değerleri değiştirilebilir.
İlk olarak, “Person” sınıfının parametresiz yapıcı metodu tanımlanmıştır. Bu yapıcı metot, “name” özelliğini “Unknown” ve “age” özelliğini 0 olarak başlatır.
public Person() {
this.name = "Unknown";
this.age = 0;
}
İkinci yapıcı metot, “name” parametresini alır ve “age” özelliğini 0 olarak başlatır.
public Person(String name) {
this.name = name;
this.age = 0;
}
Son olarak, üçüncü yapıcı metot, “name” ve “age” parametrelerini alır ve her iki özelliği de başlatır.
public Person(String name, int age) {
this.name = name;
this.age = age;
}
Bu yapıcı metodlar, sınıfın farklı kullanım senaryoları için çeşitli seçenekler sunar. Örneğin, bir kullanıcı sadece isim bilgisi vermek istiyorsa “Person(String name)” yapıcı metodunu kullanabilir. Veya bir kullanıcı hem isim hem de yaş bilgisi vermek istiyorsa “Person(String name, int age)” yapıcı metodunu kullanabilir.
Yapıcı metodlar, nesne oluşturma sırasında otomatik olarak çağrıldığından, nesnenin başlangıç durumunu belirlemek için çok kullanışlıdır. Bu sayede, nesne oluşturulduğunda hemen
sınıfın özellikleri ve durumu belirlenir ve nesnenin kullanıma hazır hale gelmesi sağlanır.
Ayrıca, yapıcı metotlar, sınıfın özellikleri değiştirildiğinde çalışacak özel metotları çağırmak için de kullanılabilir. Bu yöntemler genellikle “setter” metotları olarak adlandırılır ve özelliklerin değerlerini değiştirmek için kullanılırlar.
Aşağıda, “Person” sınıfına birkaç örnek oluşturarak, farklı yapıcı metotlarını kullanmanın nasıl yapıldığını gösteren bir örnek verilmiştir:
public class Main {
public static void main(String[] args) {
// Parametresiz yapıcı metodu kullanarak bir nesne oluştur
Person person1 = new Person();
System.out.println("Person1: " + person1.getName() + ", " + person1.getAge()); // Person1: Unknown, 0
// Sadece isim bilgisi vererek yapıcı metodu kullanarak bir nesne oluştur
Person person2 = new Person("Alice");
System.out.println("Person2: " + person2.getName() + ", " + person2.getAge()); // Person2: Alice, 0
// İsim ve yaş bilgisini vererek yapıcı metodu kullanarak bir nesne oluştur
Person person3 = new Person("Bob", 25);
System.out.println("Person3: " + person3.getName() + ", " + person3.getAge()); // Person3: Bob, 25
}
}
Bu örnekte, “Person” sınıfına ait üç farklı yapıcı metot kullanılarak, “person1”, “person2” ve “person3” adında üç nesne oluşturulmuştur. İlk nesne, parametresiz yapıcı metot kullanılarak oluşturulmuştur ve “name” özelliği “Unknown”, “age” özelliği ise 0 olarak başlatılmıştır. İkinci nesne, sadece “name” özelliğini belirleyen yapıcı metot kullanılarak oluşturulmuştur ve “age” özelliği 0 olarak başlatılmıştır. Üçüncü nesne ise, hem “name” hem de “age” özellikleri belirtilerek oluşturulmuştur.
Bu örnek, yapıcı metotların sınıfın farklı kullanım senaryolarına göre özelleştirilebileceğini göstermektedir. Yapıcı metotlar, sınıfın nesne oluşturulduğunda başlangıç durumunu belirlemesine ve nesnenin hazır hale gelmesine yardımcı olur.
Java Constructor Kullanımı Nasıl Yapılır?
Java’da bir sınıfın yapıcı metodu, sınıf adıyla aynı olan bir metottur ve nesne oluşturulduğunda otomatik olarak çağrılır. Yapıcı metodun amacı, nesnenin başlangıç durumunu belirlemek ve nesnenin kullanıma hazır hale gelmesini sağlamaktır. Bir sınıfın birden fazla yapıcı metodu olabilir ve bunlar farklı parametreler alabilir.
Bir yapıcı metot, aşağıdaki gibi tanımlanır:
public class MyClass {
public MyClass() {
// Yapıcı metodun içeriği
}
}
Yapıcı metodun içinde, nesnenin başlangıç durumunu belirlemek için sınıfın özellikleri atanabilir veya diğer metotlar çağrılabilir.
Parametre alan yapıcı metotlar aşağıdaki gibi tanımlanır:
public class MyClass {
public MyClass(int x, int y) {
// Yapıcı metodun içeriği
}
}
Bu örnekte, “MyClass” sınıfının iki parametre alan bir yapıcı metodu vardır. Bu yapıcı metot çağrıldığında, “x” ve “y” adlı iki tamsayı parametresi alacak ve nesnenin başlangıç durumunu bu parametrelere göre belirleyecektir.
Bir sınıfta birden fazla yapıcı metot tanımlanması durumunda, nesne oluşturulurken hangi yapıcı metotun kullanılacağı belirtilmelidir. Bunun için, aşağıdaki gibi “new” anahtar kelimesi kullanılarak yapıcı metot çağrılabilir:
MyClass myObj = new MyClass(); // Parametresiz yapıcı metot çağrılır
MyClass myObj2 = new MyClass(5, 10); // İki parametre alan yapıcı metot çağrılır
Bu örneklerde, “MyClass” sınıfından “myObj” ve “myObj2” adlı iki nesne oluşturulmuştur. İlk örnekte, parametresiz yapıcı metot çağrılmıştır ve ikinci örnekte ise iki parametreli yapıcı metot çağrılmıştır.
Java Constructor Hakkında 10 Örnek Kod
Bir sınıfta parametresiz yapıcı metodun tanımlanması
public class Araba {
private String model;
public Araba() {
this.model = "Bilinmiyor";
}
public void setModel(String model) {
this.model = model;
}
public void bilgileriYazdir() {
System.out.println("Araba modeli: " + model);
}
public static void main(String[] args) {
Araba araba = new Araba();
araba.bilgileriYazdir();
}
}
2. Bir sınıfta parametre alan yapıcı metodun tanımlanması
public class Araba {
private String model;
public Araba(String model) {
this.model = model;
}
public void bilgileriYazdir() {
System.out.println("Araba modeli: " + model);
}
public static void main(String[] args) {
Araba araba = new Araba("Mercedes");
araba.bilgileriYazdir();
}
}
3. Birden fazla parametre alan yapıcı metodun tanımlanması
public class Ogrenci {
private String isim;
private int yas;
private String bolum;
public Ogrenci(String isim, int yas, String bolum) {
this.isim = isim;
this.yas = yas;
this.bolum = bolum;
}
public Ogrenci(String isim, int yas) {
this(isim, yas, "Bilinmiyor");
}
public void bilgileriYazdir() {
System.out.println("Öğrenci ismi: " + isim);
System.out.println("Öğrenci yaşı: " + yas);
System.out.println("Öğrenci bölümü: " + bolum);
}
public static void main(String[] args) {
Ogrenci ogrenci1 = new Ogrenci("Ahmet", 20, "Bilgisayar Mühendisliği");
Ogrenci ogrenci2 = new Ogrenci("Mehmet", 22);
ogrenci1.bilgileriYazdir();
ogrenci2.bilgileriYazdir();
}
}
4. Super anahtar kelimesi kullanarak üst sınıfın yapıcı metodunu çağırmak
public class Hayvan {
private String tur;
public Hayvan(String tur) {
this.tur = tur;
}
public void bilgileriYazdir() {
System.out.println("Hayvan türü: " + tur);
}
}
public class Kedi extends Hayvan {
private String cins;
public Kedi(String tur, String cins) {
super(tur);
this.cins = cins;
}
public void bilgileriYazdir() {
super.bilgileriYazdir();
System.out.println("Kedi cinsi: " + cins);
}
public static void main(String[] args) {
Kedi kedi = new Kedi("Kedigiller", "Van Kedisi");
kedi.bilgileriYazdir();
}
}
5. Final anahtar kelimesi kullanarak yapıcı metod içinde değiştirilemeyen bir değişken tanımlamak
public class Araba {
private final String model;
public Araba(String model) {
this.model = model;
}
public void bilgileriYazdir() {
System.out.println("Araba modeli: " + model);
}
public static void main(String[] args) {
Araba araba = new Araba("Mercedes");
araba.bilgileriYazdir();
}
}
6. Static yapıcı metod kullanarak bir sınıfın yüklenmesi sırasında bir kez çalışacak işlemler yapmak
public class Ogrenci {
private static int sayac = 0;
public Ogrenci() {
sayac++;
}
public static int getSayac() {
return sayac;
}
public static void main(String[] args) {
Ogrenci ogrenci1 = new Ogrenci();
Ogrenci ogrenci2 = new Ogrenci();
System.out.println("Oluşturulan öğrenci sayısı: " + Ogrenci.getSayac());
}
}
7. Protected erişim belirleyici kullanarak yapıcı metodun alt sınıflar tarafından erişilebilirliğini sağlamak
public class Hayvan {
protected String tur;
protected Hayvan(String tur) {
this.tur = tur;
}
}
public class Kedi extends Hayvan {
private String cins;
public Kedi(String tur, String cins) {
super(tur);
this.cins = cins;
}
public void bilgileriYazdir() {
System.out.println("Hayvan türü: " + tur);
System.out.println("Kedi cinsi: " + cins);
}
public static void main(String[] args) {
Kedi kedi = new Kedi("Kedigiller", "Van Kedisi");
kedi.bilgileriYazdir();
}
}
8. Yapıcı metodu private olarak tanımlayarak sınıfın sadece içinden örnek oluşturulmasını sağlamak
public class Araba {
private String model;
private Araba(String model) {
this.model = model;
}
public static Araba yeniAraba(String model) {
return new Araba(model);
}
public void bilgileriYazdir() {
System.out.println("Araba modeli: " + model);
}
public static void main(String[] args) {
Araba araba = Araba.yeniAraba("Mercedes");
araba.bilgileriYazdir();
}
}
9. Yapıcı metodu abstract sınıfta tanımlamak