akhir dan kata kunci Java lain - 1

"Hai, Amigo!"

"Hai, Bilaabo!"

"Hari ini saya akan memberitahu anda tentang beberapa kata kunci dalam Java. Tetapi saya akan mulakan dengan yang paling menarik: kata kunci akhir. "

"Anda boleh menggunakan kata kunci akhir apabila mengisytiharkan pembolehubah, kaedah atau kelas."

"Dan kenapa kita perlu muktamad?"

"Ia agak mudah. ​​Jika kita menandakan pembolehubah sebagai muktamad, maka ia menjadi tidak boleh diubah:"

final int i = 5;
i++; //Compilation error: the value of i cannot be changed.

"Saya faham."

"Jika kita menandakan kaedah sebagai muktamad, maka mengatasi kaedah dalam kelas terbitan adalah dilarang:"

class Cat
{
 public final String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat
{
 public String getName() //Compilation error: overriding the getName()
 {
  return "tiger";
 }
}

"Saya faham. Tetapi mengapa anda perlu melarang mengatasi kaedah?"

"Nah, sebagai contoh, katakan seorang pengaturcara telah menulis banyak kod penting dalam kaedah dan ingin menjamin bahawa semua kelas yang mewarisi kelasnya akan mempunyai tingkah laku yang ditentukan."

"Dan akhirnya, penggunaan ketiga."

"Jika kita menandakan kelas dengan kata kunci akhir, maka ia tidak boleh diwarisi."

public final class Cat
{
 public String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat //Compilation error: the Cat class cannot be
{
 public String getName()
 {
  return "tiger";
 }
}

"Dan mengapa kita menghalang kelas daripada diwarisi?"

"Anda harus faham bahawa kami tidak menghalang warisan menjadi menjengkelkan, tetapi demi keselamatan dan integriti kod. Jika warisan kelas tidak dilarang, maka implikasinya ialah ia dibenarkan. Dan kod yang ditulis oleh kelas pereka bentuk akan berfungsi dengan betul untuk objek kelas ini serta objek mana-mana kelas terbitan."

"Tetapi jika pemaju menyedari bahawa walaupun perubahan kecil pada kelasnya akan menyebabkan segala-galanya berhenti berfungsi seperti yang diharapkan, maka adalah lebih baik untuk melarang warisan."

"Sebagai contoh, kelas String diisytiharkan sebagai muktamad, begitu juga dengan semua jenis primitif: Integer, Boolean, Double, Character…"

"Ah, faham. Kelas String telah dicipta sebagai kelas tidak berubah dan jika mereka tiba-tiba berubah, maka banyak perkara akan berhenti berfungsi."

"Baiklah, hampir. Mari kita katakan begini: semuanya akan berfungsi hampir seperti sebelumnya, tetapi kadang-kadang akan ada ralat yang akan menjadi sangat sukar untuk dicari dan difahami. Jadi, dalam beberapa kes, mewarisi kelas atau kaedah bukanlah satu dosa, tetapi melarangnya bermakna lebih sedikit kesilapan untuk ditangkap kemudian."

"Di mana lagi anda boleh menggunakan akhir?"

"Anda boleh menggunakan parameter akhir sebelum fungsi dan sebelum pembolehubah dalam kaedah. Berikut ialah contoh:"

public void setName(final String name)
{
 final String displayName = "Mr."+ name;
  …
 this.name = displayName;
}

"Dan apa gunanya itu?"

"Nah, ada dua. Pertama, kami mengisytiharkan pembolehubah sebagai muktamad jika kami ingin memberitahu pembangun lain bahawa nilai ini ialah pemalar tertentu, dan bukan pembolehubah sahaja."

Sebagai contoh, kami ingin mengira cukai jualan berdasarkan harga:

public int getPriceNDS()
{
 final int NDS = 20;
 return this.price * NDS / 200;
}

"Dan kedua, kami memerlukan pembolehubah jenis ini apabila menulis kelas dalaman tempatan atau tanpa nama. Saya akan memberitahu anda tentang jenis kelas ini tidak lama lagi. Tetapi bukan hari ini."

"Baiklah, setakat ini tidak ada apa-apa yang terlalu rumit."

"Sila ambil perhatian bahawa hanya pembolehubah menjadi tidak boleh diubah, bukan objek yang mungkin dirujuk. Objek masih boleh ditukar."

"Saya sebenarnya baru hendak bertanya tentang itu. Dan tiada cara untuk menjadikan objek itu tidak boleh diubah?"

"Tidak, melainkan anda menulis kelas yang tidak berubah."

"Sila ambil perhatian bahawa kerana nilai pembolehubah akhir tidak boleh diubah, anda mesti menetapkan nilai awalnya dengan segera."

Kod ini akan disusun Kod ini tidak akan disusun
class Home
{
 private final int width = 200;
 private final int height = 100;

 public Home()
 {
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
 }
}

"Tetapi, yang berkata, Java membolehkan anda menangguhkan permulaan pembolehubah akhir kelas sehingga pembina."

Kod ini akan disusun Kod ini tidak akan disusun
class Home
{
 private final int width = 200;
 private final int height;

 public Home()
 {
  height = 100;
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
 }
}

"Selain itu, pembina yang berbeza boleh memulakan pembolehubah akhir dengan nilai yang berbeza. Ini agak mudah:"

Kod ini akan disusun
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
  width = 200;
 }

 public Home(int width)
 {
  this.height = 300;
  this.width = width;
 }

 public Home(int width, int height)
 {
  this.height = height;
  this.width = width;
 }
}

"Itu topik yang sangat menarik, dan semuanya masuk akal. Terima kasih, Bilaabo!"