1. Bir nesne oluşturma

Şey, nesneler yaratmaya geldik. Bununla daha önce karşılaştınız, ancak şimdi bu konuyu daha ayrıntılı olarak inceleyeceğiz. Nesneleri yaratmak aslında çok kolaydır.

Bir nesne oluşturmak için new operatörünü kullanmanız gerekir . Bir nesne oluşturmak yaklaşık olarak şuna benzer:

new Class(arguments)

Bir nesne oluşturduktan sonra, çoğu kez, oluşturulan nesneyle aynı türü paylaşan bir değişkene bir referansı hemen kaydederiz. Bu, bir nesne oluştururken genellikle şöyle bir kod gördüğünüz anlamına gelir:

Class name = new Class(arguments)

Nerede yeni bir değişkenin yaratılması ve eşittir işaretinin sağındaki kod, türü olan yeni bir nesnenin oluşturulmasıdır .Class nameClass

Örnekler:

kod Not
Object o = new Object();
Objectbir nesne oluştur
Cat pet = new Cat();
Catbir nesne oluştur
Scanner console = new Scanner(System.in)
Scannerbir nesne oluştur

Programcılar genellikle değişkenleri sınıflarından sonra, ancak küçük harfle adlandırırlar. Acemi bir programcı için bu tür kodlar kafa karıştırıcı olabilir:

kod
BufferedReader bufferedReader = new BufferedReader( reader );
Cat cat = new Cat();
PersonInfo personInfo = new PersonInfo()

Bu kodda yanlış olan bir şey yok — bu, bir değişkenin yaratıldığı ve ardından aynı türden bir nesne tarafından hemen başlatıldığı en sıradan koddur.

Eşittir işaretinin solunda bir değişken oluşturma işlemimiz var. Sağda, bir nesnenin oluşturulması. Bu kadar.

2. Yapıcı

Bir nesne oluşturulurken bazı argümanların sıklıkla iletildiğini muhtemelen görmüşsünüzdür. Dahası, argümanlar bazı nesneler için iletilirken diğerleri için iletilmez. Argümanlarla birlikte tüm bu mekanizma nasıl çalışıyor?

Burada da her şey basit: her sınıfın, bir nesne oluşturulurken iletilen bağımsız değişkenleri işlemekten sorumlu olan özel bir yöntemi (veya yöntemleri) vardır. Bu yöntemlere yapıcılar denir . Veya sadece birinden bahsediyorsak: yapıcı .

Bir yapıcı yöntemi normal bir yöntemden ayırt etmek kolaydır. Bu yöntemin iki ayırt edici özelliği vardır:

  • yapıcının adı sınıfının adıyla aynıdır (ve büyük harfle başlar)
  • bir yapıcının dönüş türü yoktur.

Genel olarak, genellikle şöyle görünür:

modifiers Class(arguments)
{
   Code
}

Örnek:

kod Not
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Pointsınıf




Pointsınıf oluşturucu
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




Sınıfın bir nesnesini oluşturun Point. Sınıf yapıcısı çağrılacaktır.

Yapıcının nasıl göründüğüne dikkat edin: dönüş tipi yoktur ve adı sınıf adıyla aynıdır.

Ve bir şey daha: yapıcının içindeki koda bir göz atın. Yapıcının parametreleri, sınıfın alanlarıyla aynı adlara sahiptir: x ve y. Yeni parametre adları oluşturmaktan kaçınmak standart bir uygulamadır. Adlar, sınıfın alanlarının adlarıyla aynıdır. Ad çakışması this anahtar sözcüğü kullanılarak çözülür.

3. Yapıcı çağırmak

Yeni bir nesne oluşturmak için new operatörünü ve "new Class ( argümanlar )" gibi bir komutu kullandığınızda iki şey olur:

  • Java makinesi, türü Class olan bir nesne oluşturur.
  • Java makinesi, nesnenin yapıcısını çağırır ve argümanlarınızı iletir

Bir programcı olarak, sınıfınızın hangi kuruculara sahip olması gerektiğine ve bu kurucuların hangi parametrelere sahip olması gerektiğine siz karar verirsiniz.

Bir hayvan barınağında kedileri takip etmek için bir sınıf oluşturmaya karar verdiğinizi varsayalım. O zaman Catsınıfınız şöyle görünebilir:

class Cat
{
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
}
Cat cat = new Cat("Whiskers", 2);
buna izin verilir
Cat cat = new Cat("Whiskers");
Ancak buna izin verilmiyor Bu kod derlenmeyecek.
Cat cat = new Cat();
Ve buna izin verilmiyor. Bu kod derlenmeyecek.

Sınıfın Cat, adı ve yaş parametreleri olan tek bir yapıcısı vardır. Başka oluşturucu olmadığından, bir nesne oluştururken kedinin adını ( name) ve yaşını ( ) argüman olarak iletmelisiniz. ageYapıcıya bağımsız değişkenler iletmek isteğe bağlı değildir .

4. Çoklu kurucular

Ancak ihtiyacınız varsa, sınıfa birden çok kurucu ekleyebilirsiniz. Yapıcı sayısında veya parametrelerinde herhangi bir sınırlama yoktur. Bir nesne oluşturduğunuzda, derleyici otomatik olarak parametrelerle eşleşen oluşturucuyu seçer.

kod Not
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }
   public Cat(String name)
   {
      this.name = name;
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Buna izin verilir: ilk kurucu çağrılacak
Cat cat = new Cat("Whiskers");
Buna izin verilir: ikinci kurucu çağrılacak
Cat cat = new Cat();
Ancak buna izin verilmiyor Bu kod derlenmeyecek.

Bir kedinin yaşının bilinmeyebileceğini hesaba katmaya karar verdik. Bu durumu halletmek için, sadece bir parametreye sahip olan bir kurucu ile birlikte özel sabiti ekledik UNKNOWN- kedinin adı.

Her iki yapıcıda da her iki değişkeni de başlattığımıza dikkat edin. Bilinmeyen/eksik parametreleri sabit ile değiştiriyoruz UNKNOWN.

Yaş değişkenine herhangi bir değer atanmazsa, varsayılan değeri 0 olacaktır. Sonuçta, sokakta bulunan bir kedi yavrusu pekala 0 tam yaşında olabilir. Bu, yaş değişkenindeki sıfırın mutlaka "bilinmeyen yaş" anlamına gelmediği anlamına gelir.

5. Varsayılan kurucu

Nesnelerinizin herhangi bir parametre olmadan başlatılmasını istiyorsanız, sınıfınızın bağımsız değişken olmayan bir oluşturucu bildirmesi gerekir.

Parametresiz bir oluşturucu, kodsuz bir oluşturucu olmak zorunda değildir. Böyle bir yapıcı, değişkenleri başlangıç ​​değerleri ile başlatan kod içerebilir:

kod Not
class Cat
{
   public static final int UNKNOWN = -1;
   public String name;
   public int age;

   public Cat(String name, int age)
   {
      this.name = name;
      this.age = age;
   }

   public Cat()
   {
      this.name = "Nameless";
      this.age = UNKNOWN; // Unknown
   }
}
Cat cat = new Cat("Whiskers", 2);
Buna izin verilir: ilk kurucu çağrılacak
Cat cat = new Cat();
Buna izin verilir: ikinci kurucu çağrılacak

varsayılan kurucu

Bilmeniz ve hatırlamanız gereken çok önemli bir nokta var.

Sınıfınız birden fazla yapıcı bildirirse , derleyici, genel değiştiriciye sahip argümansız bir kurucu olan varsayılan bir kurucu ekler.

Ancak sınıfınız bir tane bile kurucu bildirirse , o zaman hiçbir varsayılan kurucu eklenmez ve isterseniz onu kendiniz eklemeniz gerekir.

kod Not
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Buna izin verilir: varsayılan kurucu çağrılacak