1. Konstanta

Banyak bahasa pemrograman lain yang memiliki konstanta , yaitu variabel yang nilainya tidak dapat diubah . Biasanya, mereka digunakan untuk beberapa hal mendasar seperti jumlah Piatau jumlah hari dalam bulan dalam setahun. Yang mengatakan, pada prinsipnya, seorang programmer dapat membuat variabel apa pun menjadi konstanta, jika dia memutuskan bahwa hal itu diperlukan.

Jadi bagaimana Anda mendeklarasikan variabel yang tidak dapat diubah (konstanta) di Jawa? Ada kata kunci khusus untuk ini: final. Membuat variabel yang tidak dapat diubah terlihat sama dengan membuat variabel biasa. Satu-satunya perbedaan adalah sebelum tipe variabel Anda perlu menulis kata final, seperti ini:

final Type name = value;

Jika Anda mencoba untuk menetapkan nilai yang berbeda ke finalvariabel, maka program Anda tidak dapat dikompilasi.

Variabel finalharus diinisialisasi (nilai harus diberikan padanya) saat dideklarasikan. Ada satu pengecualian untuk aturan ini: Anda dapat memindahkan inisialisasi variabel kelas statis ke konstruktor. Tapi Anda akan mempelajarinya di Level 10 .

Untuk mengurangi jumlah kata kunci, pengembang Java menggunakan kata tersebut finallebih dari sekadar mendeklarasikan konstanta. finaljuga dapat diterapkan pada metode dan bahkan kelas. Metode yang dinyatakan sebagai finaltidak dapat ditimpa, dan kelas yang dinyatakan sebagai finaltidak dapat diwariskan.

Pengubah finaldapat ditambahkan sebelum variabel apa pun: variabel lokal, parameter metode, bidang kelas, dan variabel kelas statis.

Perhatikan bahwa finalsebelum nama variabel hanyalah perlindungan terhadap setiap perubahan pada variabel itu . Jika variabel menyimpan referensi ke suatu objek, maka objek tersebut masih dapat 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 array.

Ini tidak diperbolehkan: variabel datadideklarasikan sebagai final.

Tapi Anda bisa melakukan ini.
Dan juga ini.

konstanta global

Jika Anda memutuskan untuk mendeklarasikan konstanta global dalam program Anda, maka Anda perlu membuat variabel kelas statis , dan membuatnya publicdan final. Ada gaya khusus untuk nama variabel tersebut: ditulis dengan huruf kapital semua, dengan karakter garis bawah digunakan untuk memisahkan kata.

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. Bayangan variabel

Seperti yang kami katakan sebelumnya, Anda tidak dapat membuat beberapa variabel lokal dengan nama yang sama dalam metode yang sama. Dengan cara yang berbeda, Anda bisa.

Tapi inilah yang mungkin tidak Anda ketahui: variabel instan dan variabel metode lokal dapat memiliki nama yang sama.

Contoh:

Kode Visibilitas variabel
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 addmetode ini, kami mendeklarasikan variabel lokal bernama sum. Sampai akhir metode, itu membayangi (atau menutupi ) sumvariabel instan.

Oke, katamu, itu yang diharapkan dalam arti tertentu. Tapi itu bukan akhir dari cerita. Ternyata jika variabel instan dibayangi oleh variabel lokal, masih ada cara untuk merujuk ke variabel instan di dalam metode. Kami melakukan ini dengan menulis thiskata kunci sebelum namanya:

this.name

Berikut adalah contoh di mana konflik nama berhasil diselesaikan:

Kode Visibilitas variabel
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

Variabel count and sum tersedia di mana saja dengan atau tanpa thiskata kunci. Pada baris di mana sum variabel lokal membayangi sumvariabel instan, sum variabel instan hanya dapat diakses menggunakan thiskata kunci.

Jika variabel kelas statis daripada variabel instan dibayangi, maka Anda perlu mengaksesnya melalui nama kelas daripada kata thiskunci:

ClassName.name

Contoh:

Kode Visibilitas variabel
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 dapat mengakses count dan sum variabel statis di mana saja dengan atau tanpa menggunakan nama kelas Solutionsebagai awalan. Di baris di mana sumvariabel lokal membayangi sumvariabel instan, akses ke sum variabel instan hanya dimungkinkan bila digunakan Solutionsebagai awalan.



3. Variabel di dalam satu forlingkaran

Dan satu lagi fakta kecil tapi menarik.

Ada juga tempat di mana variabel dideklarasikan dengan cara khusus — di dalam forloop .

Anda mungkin ingat bahwa sebuah forloop biasanya memiliki variabel counter dalam tanda kurung. Dan apa yang akan menjadi visibilitas variabel ini? Lagi pula, itu tidak ada di dalam tubuh loop. Apakah ini seluruh metode? Atau tidak?

Jawaban yang benar adalah: variabel yang dideklarasikan di header loop forhanya dapat dilihat di badan loop dan di header forloop .

Contoh:

Kode Visibilitas variabel
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 selalu dapat menulis loop satu demi satu dalam kode Anda dan menggunakan variabel penghitung dengan nama yang sama — itu tidak akan menimbulkan masalah.

Contoh:

Kode Visibilitas variabel
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