1. Objek

Segala sesuatu di Jawa adalah objek.

Lebih tepatnya, sangat sedikit hal di Jawa yang bukan objek. Misalnya, tipe primitif. Tapi ini pengecualian yang agak jarang dari aturan tersebut.

Jadi apa itu objek?

Objek adalah entitas yang mengelompokkan data bersama dengan metode yang memproses data tersebut . Saat kami mengatakan "data", yang kami maksud adalah variabel, tentu saja.

Variabel objek disebut "data" atau "status".

Metode objek dikatakan sebagai "perilaku" -nya. Merupakan kebiasaan untuk mengubah status objek (variabel) hanya dengan menggunakan metode objek tersebut. Mengubah variabel objek secara langsung (tidak menggunakan metodenya) dianggap bentuk yang buruk.

Setiap objek , serta setiap variabel, memiliki tipe . Jenis ini ditentukan sekali saat objek dibuat dan tidak dapat diubah di masa mendatang. Tipe objek adalah kelasnya.

Setiap objek memiliki salinan variabel instan (bidang) sendiri. Jika variabel int non-statis dideklarasikan dalam sebuah kelas, dan program Anda membuat 10 objek dari kelas tersebut, maka setiap objek akan memiliki variabel intnya sendiri.

Berinteraksi dengan suatu objek

Cara paling nyaman untuk bekerja dengan objek adalah dengan menyimpan referensi ke objek tersebut dalam sebuah variabel, lalu memanggil metode pada variabel tersebut. Ini akan terlihat familier bagi Anda:

variable.method()

Di mana variablevariabel yang menyimpan referensi ke suatu objek, dan methodmerupakan metode kelas itu.

Jika Anda ingin merujuk ke bidang (variabel) suatu objek, maka Anda juga perlu menggunakan operator titik :

variable.field

Di mana variablevariabel yang menyimpan referensi ke suatu objek, dan fieldmerupakan variabel instan (bidang).


2. newoperator

Untuk membuat objek dari kelas tertentu, Anda perlu menggunakan newoperator. Secara umum, inilah tampilan membuat objek:

Class variable = new Class(arguments);

Dimana Classnama class dari variablevariabel sekaligus nama class dari objek yang akan dibuat. Dan variable merupakan variabel yang menyimpan referensi ke objek yang dibuat. Dan argumentsmerupakan placeholder untuk daftar argumen yang dibatasi koma yang diteruskan ke konstruktor.

Daftar spesifik dari argumen yang dapat dilewatkan ditentukan oleh programmer yang menulis kelas tersebut.

Anda telah membuat objek sebelumnya dan bahkan menggunakan konstruksi khusus ini. Anda belum lupa, saya harap?

Scanner console = new Scanner(System.in);
int x = console.nextInt();

Scanner console— ini membuat consolevariabel yang bertipe Scanner. — ini membuat objek baru. Dan operator penugasan menyetel variabel sama dengan referensi ke objek yang baru dibuat.new Scanner(System.in)Scannerconsole

Di baris kedua, kita memanggil nextInt()metode pada Scannerobjek, menggunakan consolevariabel, yang menyimpan referensi ke Scannerobjek.

Contoh pembuatan objek:

Kode Keterangan
String s = new String("Hello");
Buat Stringobjek
Scanner console = new Scanner("");
Buat Scannerobjek
int[] data = new int[10];
Buat an int[]: wadah 10 intelemen

Objek yang dibuat disebut objek kelas atau instance dari kelas , sedangkan kelas disebut kelas objek . Misalnya, svariabel menyimpan referensi ke instance kelas String.



3. Memperkenalkan kelas

Saya pikir Anda telah melihat betapa nyamannya menggunakan kelas yang ditulis oleh programmer lain. Tapi bagaimana dengan menulis kelas Anda sendiri?

Bagaimana Anda tahu kapan dan di mana Anda membutuhkan kelas Anda sendiri dan bagaimana membuatnya?

Pemrogram biasanya membuat kelasnya sendiri ketika ingin memasukkan entitas baru ke dalam program. Apakah itu terdengar membingungkan? Kemudian saya akan mencoba menjelaskan, tetapi saya akan mulai dari jauh.

Kumpulan data

Menyederhanakan sedikit, kita dapat mengatakan bahwa objek di Java adalah blok memori yang berisi variabel yang dideklarasikan dalam kelas (bidang instance). Atau, dengan kata lain, variabel digabungkan menjadi satu grup.

Katakanlah program Anda perlu menyimpan koordinat 100titik dan memerlukan metode untuk menampilkannya di layar. Ini dapat dilakukan dengan menggunakan array. Misalnya, seperti ini:

class Solution
{
   public static void printPoints(int[] x, int[] y, int[] color)
   {
     for (int i = 0; i < x.length; i++)
       System.out.println("Color of (" + x[i] + ", " + y[i] + ") = " + color[i]);
   }

   public static void main(String[] args)
   {
     int[] x = new int[100];
     int[] y = new int[100];
     int[] color = new int[100];
     printPoints(x, y, color);
   }
}

Akan jauh lebih nyaman jika kita memiliki satu jenis untuk menyimpan semua informasi tentang suatu titik: x, y, color. Jika tipe seperti itu tidak ada di Java, Anda bisa membuatnya sendiri.

Untuk melakukan ini, kami akan menulis kode untuk Pointkelas:

public class Point
{
   public int x;
   public int y;
   public int color;
}

Sekarang kode di atas dapat ditulis ulang sebagai:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       System.out.println("Color of (" + points[i].x + ", " + point[i].y + ") = " + points[i].color);
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Sekarang mari tambahkan metode ke Pointkelas yang akan menampilkan informasi tentang objek:

public class Point
{
   public int x;
   public int y;
   public int color;
   public void print()
   {
     System.out.println("Color of (" + x + ", " + y + ") = " + color);
   }
}

Sekarang Solutionkelasnya terlihat seperti ini:

class Solution
{
   public static void printPoints(Point[] points)
   {
     for (int i = 0; i < points.length; i++)
       points[i].print();
   }

   public static void main(String[] args)
   {
     Point[] data = new Point[100];
     for (int i = 0; i < data.length; i++)
       data[i] = new Point();
     printPoints(data);
   }
}

Kami dengan terampil menyembunyikan koordinat titik dan informasi warna di dalam Pointkelas bersama dengan metode yang menampilkan status titik.

Kelas adalah cara untuk mengelola kompleksitas program. Program besar menjadi kurang kompleks ketika dipecah menjadi banyak kelas kecil.


4. Objek yang dapat diubah vs tidak dapat diubah

Sekali waktu, kami mempelajari konstanta di Jawa dan sampai pada kesimpulan yang tidak terlalu menghibur. Konstanta memungkinkan Anda melindungi variabel agar tidak diubah, tetapi konstanta tidak dapat mencegah perubahan pada objek yang dirujuknya.

Untuk mengatasi masalah ini, Java hadir dengan objek konstanta. Atau, seperti yang lebih sering disebut, objek yang tidak dapat diubah.

Omong-omong, Anda sudah mengetahui kelas seperti itu, yang objeknya tidak dapat diubah: String. Objek Stringtetap selamanya tidak berubah setelah dibuat. Dan bagaimana pencipta Java mencapai ini?

Pertama, semua variabel kelas Stringdisembunyikan, yaitu dideklarasikan private.

Kedua, Anda tidak dapat mewarisi Stringkelas: deklarasi kelasnya menyertakan finalpengubah.

Ketiga, dan yang paling menarik, semua metode kelas String, yang, secara teori, Anda harapkan untuk mengubah objek yang ada, sebenarnya tidak mengubahnya, melainkan mengembalikan yang baru.

Misalnya, toUpperCase()metode membuat semua huruf dalam string menjadi huruf besar. Tapi alih-alih mengubah objek yang memanggil metode, ia mengembalikan Stringobjek baru yang terdiri dari huruf kapital:

String text = "This is a very important message";
String message = text.toUpperCase();

Inilah yang akan ada di memori setelah mengeksekusi kode ini:

Objek yang dapat diubah vs tidak dapat diubah

Jadi jangan ragu untuk meneruskan string Anda ke metode apa pun: tidak ada yang akan mengubahnya.