1. Objek

Segala-galanya di Jawa adalah objek.

Lebih tepat lagi, terdapat sangat sedikit perkara di Jawa yang bukan objek. Contohnya, jenis primitif. Tetapi ini adalah pengecualian yang agak jarang berlaku kepada peraturan.

Jadi apakah objek?

Objek ialah entiti yang mengumpulkan data bersama dengan kaedah yang memproses data . Apabila kami menyebut "data", kami maksudkan pembolehubah, sudah tentu.

Pembolehubah objek dipanggil "data" atau "keadaan".

Kaedah sesuatu objek dikatakan sebagai "kelakuan". Adalah menjadi kebiasaan untuk menukar keadaan objek (pembolehubah) hanya menggunakan kaedah objek itu. Menukar pembolehubah objek secara langsung (tidak menggunakan kaedahnya) dianggap sebagai bentuk buruk.

Setiap objek , serta setiap pembolehubah, mempunyai jenis . Jenis ini ditentukan sekali apabila objek dicipta dan tidak boleh diubah pada masa hadapan. Jenis objek ialah kelasnya.

Setiap objek mempunyai salinan pembolehubah contoh sendiri (medan). Jika pembolehubah int bukan statik diisytiharkan dalam kelas, dan program anda mencipta 10 objek kelas itu, maka setiap objek akan mempunyai pembolehubah int sendiri.

Berinteraksi dengan objek

Cara paling mudah untuk bekerja dengan objek ialah menyimpan rujukan kepadanya dalam pembolehubah, dan kemudian memanggil kaedah pada pembolehubah itu. Ini akan kelihatan biasa kepada anda:

variable.method()

Di manakah variablepembolehubah yang menyimpan rujukan kepada objek, dan methodmerupakan kaedah kelas itu.

Jika anda ingin merujuk kepada medan (pembolehubah) objek, maka anda juga perlu menggunakan pengendali titik :

variable.field

Di manakah variablepembolehubah yang menyimpan rujukan kepada objek, dan fieldmerupakan pembolehubah contoh (medan).


2. newpengendali

Untuk mencipta objek kelas tertentu, anda perlu menggunakan newoperator. Secara umum, inilah rupa untuk mencipta objek:

Class variable = new Class(arguments);

Di manakah Classnama kelas pembolehubah variableserta nama kelas objek yang akan dibuat. Dan variable merupakan pembolehubah yang menyimpan rujukan kepada objek yang dibuat. Dan argumentsialah pemegang tempat untuk senarai dalil yang dibatasi koma yang diserahkan kepada pembina.

Senarai khusus hujah yang boleh diluluskan diputuskan oleh pengaturcara yang menulis kelas.

Anda telah mencipta objek sebelum ini dan juga menggunakan binaan khusus ini. Anda tidak lupa, saya harap?

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

Scanner console— ini mencipta consolepembolehubah yang jenisnya ialah Scanner. — ini mencipta objek baharu . Dan pengendali tugasan menetapkan pembolehubah sama dengan rujukan kepada objek yang baru dibuat.new Scanner(System.in)Scannerconsole

Dalam baris kedua, kami memanggil nextInt()kaedah pada Scannerobjek, menggunakan consolepembolehubah, yang menyimpan rujukan kepada Scannerobjek.

Contoh penciptaan objek:

Kod Penerangan
String s = new String("Hello");
Buat Stringobjek
Scanner console = new Scanner("");
Buat Scannerobjek
int[] data = new int[10];
Cipta satu int[]: bekas 10 intunsur

Objek yang dicipta dipanggil objek kelas atau kejadian kelas , manakala kelas dipanggil kelas objek . Sebagai contoh, spembolehubah menyimpan rujukan kepada contoh kelas String.



3. Memperkenalkan kelas

Saya fikir anda telah melihat betapa mudahnya menggunakan kelas yang ditulis oleh pengaturcara lain. Tetapi bagaimana dengan menulis kelas anda sendiri?

Bagaimana anda tahu bila dan di mana anda memerlukan kelas anda sendiri dan bagaimana untuk membuatnya?

Pengaturcara biasanya membuat kelas mereka sendiri apabila mereka ingin membawa entiti baharu ke dalam program. Adakah bunyi itu mengelirukan? Kemudian saya akan cuba menerangkan, tetapi saya akan mulakan dari jauh.

Kumpulan data

Memudahkan sedikit, kita boleh mengatakan bahawa objek dalam Java ialah blok memori yang mengandungi pembolehubah yang diisytiharkan dalam kelas (medan contoh). Atau, dengan kata lain, pembolehubah digabungkan menjadi satu kumpulan.

Katakan program anda perlu menyimpan koordinat 100titik dan memerlukan kaedah untuk memaparkannya pada skrin. Ini boleh dilakukan menggunakan tatasusunan. Sebagai contoh, 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);
   }
}

Ia akan menjadi lebih mudah jika kita mempunyai satu jenis untuk menyimpan semua maklumat tentang titik: x, y, color. Jika jenis sedemikian tidak wujud di Jawa, anda boleh menciptanya sendiri.

Untuk melakukan ini, kami akan menulis kod untuk Pointkelas:

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

Kini kod di atas boleh ditulis semula 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 tambah kaedah ke Pointkelas yang akan memaparkan maklumat 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 Solutionkelas kelihatan 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 mahir menyembunyikan koordinat titik dan maklumat warna di dalam Pointkelas bersama-sama dengan kaedah yang memaparkan keadaan titik.

Kelas ialah cara untuk mengurus kerumitan program. Program yang besar menjadi kurang kompleks apabila ia dipecahkan kepada banyak kelas kecil.


4. Boleh berubah vs objek tidak berubah

Pada suatu masa dahulu, kami mempelajari pemalar di Jawa dan membuat kesimpulan yang tidak begitu menggembirakan. Pemalar membolehkan anda melindungi pembolehubah daripada diubah, tetapi ia tidak boleh menghalang perubahan pada objek yang dirujuknya.

Untuk menyelesaikan masalah ini, Java menghasilkan objek tetap. Atau, seperti yang lebih kerap dipanggil, objek tidak berubah.

Dengan cara ini, anda sudah mengetahui kelas sedemikian, yang objeknya tidak boleh diubah: String. Objek Stringkekal selama-lamanya tidak berubah selepas ia dicipta. Dan bagaimanakah pencipta Java mencapai ini?

Pertama, semua pembolehubah kelas Stringdisembunyikan, iaitu diisytiharkan private.

Kedua, anda tidak boleh mewarisi Stringkelas: pengisytiharan kelasnya termasuk finalpengubah suai.

Ketiga, dan yang paling menarik, semua kaedah kelas String, yang, secara teori, anda harapkan untuk menukar objek sedia ada, sebenarnya tidak mengubahnya, tetapi sebaliknya mengembalikan yang baru.

Sebagai contoh, toUpperCase()kaedah membuat semua huruf dalam rentetan huruf besar. Tetapi bukannya menukar objek yang kaedah dipanggil, ia mengembalikan Stringobjek baharu yang terdiri daripada huruf besar:

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

Inilah yang akan ada dalam ingatan selepas melaksanakan kod ini:

Objek boleh ubah vs tidak boleh ubah

Jadi jangan ragu untuk menghantar rentetan anda kepada mana-mana kaedah: tiada siapa yang akan mengubahnya.