1. Pemalar

Banyak bahasa pengaturcaraan lain mempunyai pemalar , iaitu pembolehubah yang nilainya tidak boleh diubah . Biasanya, ia digunakan untuk beberapa jenis perkara asas seperti bilangan Piatau bilangan hari dalam bulan dalam setahun. Yang berkata, pada dasarnya, seorang pengaturcara boleh menjadikan sebarang pembolehubah sebagai pemalar, jika dia memutuskan bahawa berbuat demikian adalah perlu.

Jadi bagaimana anda mengisytiharkan pembolehubah tidak berubah (malar) di Jawa? Terdapat kata kunci khas untuk ini: final. Mencipta pembolehubah tidak berubah kelihatan sama seperti mencipta pembolehubah biasa. Satu-satunya perbezaan ialah sebelum jenis pembolehubah anda perlu menulis perkataan final, seperti ini:

final Type name = value;

Jika anda cuba memberikan nilai yang berbeza kepada finalpembolehubah, maka program anda tidak akan dikompil.

Pembolehubah finalmesti dimulakan (nilai mesti diberikan kepadanya) apabila ia diisytiharkan. Terdapat satu pengecualian kepada peraturan ini: anda boleh memindahkan permulaan pembolehubah kelas statik ke dalam pembina. Tetapi anda akan belajar tentang perkara ini di Tahap 10 .

Untuk mengurangkan bilangan kata kunci, pembangun Java menggunakan perkataan itu finaluntuk lebih daripada sekadar mengisytiharkan pemalar. finaljuga boleh digunakan untuk kaedah dan juga kelas. Kaedah yang diisytiharkan sebagai finaltidak boleh ditindih, dan kelas yang diisytiharkan sebagai finaltidak boleh diwarisi.

Pengubah finalsuai boleh ditambah sebelum sebarang pembolehubah: pembolehubah tempatan, parameter kaedah, medan kelas dan pembolehubah kelas statik.

Ambil perhatian bahawa finalsebelum nama pembolehubah hanyalah perlindungan terhadap sebarang perubahan pada pembolehubah itu . Jika pembolehubah menyimpan rujukan kepada objek, maka objek itu masih boleh diubah.

Contoh:

final int[] data = {1, 2, 3, 4, 5, 6};

data = {6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
Kami membuat tatasusunan.

Ini tidak dibenarkan: pembolehubah datadiisytiharkan sebagai final.

Tetapi anda boleh melakukan ini.
Dan juga ini.

Pemalar global

Jika anda memutuskan untuk mengisytiharkan pemalar global dalam program anda, maka anda perlu mencipta pembolehubah kelas statik , dan menjadikannya publicdan final. Terdapat gaya khas untuk nama pembolehubah tersebut: ia ditulis dalam semua huruf besar, dengan aksara garis bawah digunakan untuk memisahkan perkataan.

Contoh:

class Solution
{
   public static final String SOURCE_ROOT = "c:\\projects\\my\\";
   public static final int DISPLAY_WIDTH = 1024;
   public static final int DISPLAY_HEIGHT = 768;
}


2. Pembayang boleh ubah

Seperti yang kami katakan sebelum ini, anda tidak boleh mencipta beberapa pembolehubah tempatan dengan nama yang sama dalam kaedah yang sama. Dalam kaedah yang berbeza, anda boleh.

Tetapi inilah perkara yang anda mungkin tidak tahu: pembolehubah contoh dan pembolehubah kaedah tempatan boleh mempunyai nama yang sama.

Contoh:

Kod Keterlihatan berubah-ubah
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     int sum = data * 2;
     count++;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum, data
count, sum

Dalam addkaedah tersebut, kami mengisytiharkan pembolehubah tempatan bernama sum. Sehingga akhir kaedah, ia membayangi (atau menutup ) sumpembolehubah contoh.

Baiklah, anda katakan, itu boleh dijangka dalam beberapa segi. Tetapi itu bukan penghujung cerita. Ternyata jika pembolehubah contoh dibayangi oleh pembolehubah tempatan, masih terdapat cara untuk merujuk kepada pembolehubah contoh dalam kaedah tersebut. Kami melakukan ini dengan menulis thiskata kunci sebelum namanya:

this.name

Berikut ialah contoh di mana konflik nama berjaya diselesaikan:

Kod Keterlihatan berubah-ubah
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

Pembolehubah count dan sum tersedia di mana-mana dengan atau tanpa thiskata kunci. Pada baris di mana sum pembolehubah tempatan membayangi sumpembolehubah contoh, sum pembolehubah tika hanya boleh diakses menggunakan thiskata kunci.

Jika pembolehubah kelas statik dan bukannya pembolehubah contoh dibayangi, maka anda perlu mengaksesnya melalui nama kelas dan bukannya kata thiskunci:

ClassName.name

Contoh:

Kod Keterlihatan berubah-ubah
public class Solution
{
   public static int count = 0;
   public static int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

Anda boleh mengakses pembolehubah statik count dan sum di mana-mana dengan atau tanpa menggunakan nama kelas Solutionsebagai awalan. Dalam baris di mana sumpembolehubah tempatan membayangi sumpembolehubah contoh, akses kepada sum pembolehubah tika hanya mungkin apabila digunakan Solutionsebagai awalan.



3. Pembolehubah di dalam forgelung

Dan satu lagi fakta kecil tetapi menarik.

Terdapat juga tempat di mana pembolehubah diisytiharkan dengan cara yang istimewa — di dalam forgelung .

Anda mungkin masih ingat bahawa forgelung biasanya mempunyai pembolehubah pembilang dalam kurungan. Dan apakah keterlihatan pembolehubah ini? Lagipun, ia bukan dalam badan gelung. Adakah kaedah keseluruhannya? Atau tidak?

Jawapan yang betul ialah: pembolehubah yang diisytiharkan dalam pengepala gelung hanya forkelihatan dalam badan gelung dan dalam pengepala gelungfor .

Contoh:

Kod Keterlihatan berubah-ubah
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

Jadi, anda sentiasa boleh menulis gelung satu demi satu dalam kod anda dan menggunakan pembolehubah pembilang dengan nama yang sama — yang tidak akan menimbulkan sebarang masalah.

Contoh:

Kod Keterlihatan berubah-ubah
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a