1. Membuat objek

Nah, kita sudah sampai pada membuat objek. Anda sudah menemukan ini sebelumnya, tetapi sekarang kami akan menganalisis topik ini lebih terinci. Sebenarnya sangat mudah untuk membuat objek.

Untuk membuat objek, Anda perlu menggunakan operator baru . Membuat objek terlihat seperti ini:

new Class(arguments)

Setelah membuat objek, kami paling sering segera menyimpan referensi ke dalam variabel, yang sering kali memiliki tipe yang sama dengan objek yang dibuat. Itu artinya saat membuat objek, Anda biasanya melihat kode seperti ini:

Class name = new Class(arguments)

Di mana pembuatan variabel baru, dan kode di sebelah kanan tanda sama dengan adalah pembuatan objek baru yang bertipe .Class nameClass

Contoh:

Kode Catatan
Object o = new Object();
Buat Objectobjek
Cat pet = new Cat();
Buat Catobjek
Scanner console = new Scanner(System.in)
Buat Scannerobjek

Pemrogram sering memberi nama variabel setelah kelasnya, tetapi dengan huruf kecil. Untuk programmer pemula, kode seperti itu bisa membingungkan:

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

Tidak ada yang salah dengan kode ini — ini adalah kode yang paling umum, di mana sebuah variabel dibuat dan kemudian segera diinisialisasi oleh objek dengan tipe yang sama.

Di sebelah kiri tanda sama dengan kita memiliki pembuatan variabel. Ke kanan, pembuatan objek. Itu dia.

2. Pembangun

Anda mungkin pernah melihat bahwa beberapa argumen sering diteruskan saat membuat objek. Terlebih lagi, argumen diteruskan untuk beberapa objek, tetapi tidak untuk yang lain. Bagaimana seluruh mekanisme dengan argumen ini bekerja?

Semuanya juga sederhana di sini: setiap kelas memiliki metode (atau metode) khusus yang bertanggung jawab untuk menangani argumen yang diteruskan saat membuat objek. Metode ini disebut konstruktor . Atau ketika kita berbicara tentang hanya satu: konstruktor .

Membedakan metode konstruktor dari metode biasa itu mudah. Metode ini memiliki dua fitur yang membedakan:

  • nama konstruktor sama dengan nama kelasnya (dan dimulai dengan huruf kapital)
  • konstruktor tidak memiliki tipe pengembalian.

Secara umum, seperti inilah tampilannya:

modifiers Class(arguments)
{
   Code
}

Contoh:

Kode Catatan
public class Point
{
   public int x;
   public int y;

   Point(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}
Point




Pointkonstruktor kelas kelas
public class Solution
{
   public static void main(String[] args)
   {
      Point point = new Point(5, 10);
   }
}




Membuat objek kelas Point. Konstruktor kelas akan dipanggil.

Perhatikan seperti apa konstruktornya: ia tidak memiliki tipe kembalian dan namanya sama dengan nama kelas.

Dan satu hal lagi: lihat kode di dalam konstruktor. Parameter konstruktor memiliki nama yang sama dengan bidang kelas: x dan y. Ini adalah praktik standar untuk menghindari membuat nama parameter baru. Namanya sama dengan bidang kelas. Konflik nama diselesaikan dengan menggunakan kata kunci ini.

3. Memanggil konstruktor

Saat menggunakan operator baru dan perintah seperti " Kelas baru ( argumen )" untuk membuat objek baru, dua hal terjadi:

  • Mesin Java membuat objek yang bertipe Class
  • Mesin Java memanggil konstruktor objek dan meneruskan argumen Anda

Sebagai seorang programmer, Anda harus memutuskan konstruktor apa yang harus dimiliki kelas Anda, dan parameter apa yang harus dimiliki konstruktor ini.

Misalkan Anda memutuskan untuk membuat kelas untuk melacak kucing di penampungan hewan. Maka Catkelas Anda mungkin terlihat seperti ini:

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);
Ini diperbolehkan
Cat cat = new Cat("Whiskers");
Tapi ini tidak diperbolehkan. Kode ini tidak dapat dikompilasi.
Cat cat = new Cat();
Dan ini tidak diperbolehkan. Kode ini tidak akan dikompilasi.

Kelas Cathanya memiliki satu konstruktor dengan parameter nama dan umur. Karena tidak ada konstruktor lain, Anda harus meneruskan nama kucing ( name) dan umur ( age) sebagai argumen saat membuat objek. Melewati argumen ke konstruktor bukanlah pilihan .

4. Beberapa konstruktor

Tapi jika perlu, Anda bisa menambahkan beberapa konstruktor ke kelas. Tidak ada batasan jumlah konstruktor atau parameternya. Saat Anda membuat objek, kompiler secara otomatis memilih konstruktor yang cocok dengan parameternya

Kode Catatan
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);
Ini diperbolehkan: konstruktor pertama akan dipanggil
Cat cat = new Cat("Whiskers");
Ini diperbolehkan: konstruktor kedua akan dipanggil
Cat cat = new Cat();
Tapi ini tidak diperbolehkan. Kode ini tidak dapat dikompilasi.

Kami memutuskan untuk memperhitungkan fakta bahwa usia kucing mungkin tidak diketahui. Untuk menangani kasus ini, kami menambahkan konstanta khusus UNKNOWNbersama dengan konstruktor yang hanya memiliki satu parameter — nama kucing.

Perhatikan bahwa kami masih menginisialisasi kedua variabel di dalam kedua konstruktor. Kami mengganti parameter yang tidak diketahui/hilang dengan konstanta UNKNOWN.

Jika tidak ada nilai yang diberikan ke variabel usia, maka nilai defaultnya adalah 0. Lagi pula, anak kucing yang ditemukan di jalan mungkin berusia 0 tahun penuh. Itu berarti nol pada variabel usia tidak berarti "usia tidak diketahui".

5. Konstruktor bawaan

Jika Anda ingin objek Anda dibuat tanpa parameter apa pun, kelas Anda perlu mendeklarasikan konstruktor tanpa argumen.

Konstruktor tanpa parameter belum tentu merupakan konstruktor tanpa kode. Konstruktor seperti itu dapat berisi kode yang menginisialisasi variabel dengan nilai awal:

Kode Catatan
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);
Ini diperbolehkan: konstruktor pertama akan dipanggil
Cat cat = new Cat();
Ini diperbolehkan: konstruktor kedua akan dipanggil

Konstruktor default

Ada poin yang sangat penting yang harus Anda ketahui dan ingat.

Jika kelas Anda mendeklarasikan bukan satu konstruktor , kompiler akan menambahkan konstruktor default, yang merupakan konstruktor tanpa argumen dengan pengubah publik.

Tetapi jika kelas Anda mendeklarasikan bahkan satu constructor , maka tidak ada konstruktor default yang akan ditambahkan dan Anda harus menambahkannya sendiri jika Anda menginginkannya.

Kode Catatan
class Cat
{
   public String name;
   public int age;
}
Cat cat = new Cat();
Ini diperbolehkan: konstruktor default akan dipanggil