Pembolehubah tempatan

"Salam, pelajar yang dikasihi! Sudah tiba masanya untuk menjadi lebih serius sedikit tentang pembolehubah. Tetapi kali ini kita tidak akan membincangkan struktur dalaman mereka. Sebaliknya, kita akan memberi tumpuan kepada bagaimana pembolehubah berinteraksi dengan kod di mana ia berada.

"Semua pembolehubah yang diisytiharkan di dalam kaedah dipanggil pembolehubah tempatan . Pembolehubah tempatan hanya wujud dalam blok kod di mana ia diisytiharkan. Atau, lebih tepat, ia wujud dari saat ia diisytiharkan sehingga akhir blok kod di mana ia diisytiharkan."

"Jelas sekali, saya perlukan contoh."

"Tiada masalah. Ini dia:

Kod Ketersediaan pembolehubah
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

"Mari kita semak peraturan untuk mengakses pembolehubah tempatan sekali lagi. Berikut ialah blok kod. Apakah yang menandakan permulaan dan penghujungnya?"

"Kurung kurung kerinting?"

"Betul. Ini boleh menjadi badan kaedah, badan gelung atau hanya blok kod untuk pernyataan bersyarat. Pembolehubah yang diisytiharkan dalam blok kod wujud sehingga penghujung blok kod itu. Beritahu saya, di mana akan pembolehubah wujud jika ia diisytiharkan dalam badan gelung?"

"Ia akan wujud hanya dalam badan gelung."

"Betul. Apatah lagi, ia akan dicipta dan dimusnahkan pada setiap lelaran gelung."

"Ini bermakna anda tidak boleh mengisytiharkan dua pembolehubah tempatan dengan nama yang sama dalam satu kaedah — program tidak akan disusun. Tetapi anda boleh melakukan ini jika blok kod di mana pembolehubah diisytiharkan tidak bertindih . "

"Ada sebab mengapa awak menjadi kegemaran saya, Amigo. Ambil satu contoh lagi untuk mengukuhkan ini dalam otak awak.

Kod Keterlihatan berubah-ubah
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

"Kami dapat mengisytiharkan pembolehubah tempatan kedua yang dinamakan bhanya kerana pembolehubah pertama btidak kelihatan dalam blok kod di mana bpembolehubah kedua diisytiharkan.

Parameter

"Seperti yang kami katakan sebelum ini, setiap kaedah boleh mempunyai pembolehubah yang kami panggil parameter. Bagaimana pula dengan keterlihatan dan hayatnya?"

"Hmm... saya buntu..."

"Semuanya agak mudah di sini. Parameter dicipta apabila pelaksanaan melangkah ke dalam kaedah (iaitu apabila kod kaedah mula dilaksanakan). Parameter akan dihapuskan apabila kaedah tamat."

"Dalam erti kata lain, mereka boleh dilihat di seluruh badan kaedah dan hanya di sana?"

"Ya. Contoh:

Kod Keterlihatan berubah-ubah
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

"Seperti yang kami katakan sebelum ini, argshanyalah pembolehubah yang jenisnya ialah tatasusunan rentetan. Dan seperti semua parameter, ia boleh didapati di mana-mana dalam badan kaedah. Yang berkata, kami biasanya mengabaikannya dalam contoh kami.

Pembolehubah dalam kelas

"Ingat pelajaran dalam Tahap 1, di mana kami berkata bahawa kelas boleh mempunyai kaedah dan pembolehubah. Kaedah kadangkala dipanggil kaedah contoh, dan pembolehubah — pembolehubah atau medan contoh.

"Apakah pembolehubah (atau medan) kelas ?

Ia adalah pembolehubah yang diisytiharkan bukan dalam kaedah, tetapi dalam kelas."

"Dan untuk apa mereka di sana?"

"Sebagai permulaan, mereka boleh diakses daripada mana-mana kaedah (bukan statik) kelas. Secara kasarnya, pembolehubah contoh ialah pembolehubah yang dikongsi oleh semua kaedah kelas.

Contoh:

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

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

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


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

"Dalam contoh ini, kami mempunyai dua kaedah — add()dan remove(). add()Kaedah menambah pembolehubah sumdan countcontoh, dan remove()kaedah mengurangkan pembolehubah sumdan count. Kedua-dua kaedah berfungsi pada pembolehubah contoh yang dikongsi."

"Saya faham semuanya! Pembolehubah tempatan wujud semasa kaedah sedang dilaksanakan. Pembolehubah contoh kelas wujud dalam objek kelas selagi objek itu wujud. "

"Syabas, Amigo. Kami telah meletakkan beberapa asas, dan anda akan mempelajari butiran tentang objek kelas di peringkat seterusnya.

Pembolehubah statik

"Seperti kaedah, pembolehubah dalam kelas boleh menjadi statik atau tidak statik. Kaedah statik hanya boleh mengakses pembolehubah statik.

"Saya belum mempunyai pemahaman yang jelas tentang pembolehubah statik."

"Oh, saya tahu, tetapi jangan risau. Buat masa ini, cukup selesa dengan mereka. Biasakan diri dengan mereka. Dalam Tahap 11, kami akan menganalisis struktur pembolehubah statik dan kaedah dan anda akan memahami sebab-sebabnya. sekatan.

"Untuk membuat pembolehubah statik (pembolehubah kelas), anda mesti menulis statickata kunci dalam pengisytiharannya.

"Pembolehubah statik tidak terikat pada objek atau contoh kelas di mana ia diisytiharkan. Sebaliknya, ia tergolong dalam kelas itu sendiri. Itulah sebabnya ia wujud walaupun tidak ada satu pun objek kelas telah dicipta . Anda boleh merujuk kepada mereka dari kelas lain menggunakan konstruk seperti:

ClassName.variableName

Contoh:

Kod Keterlihatan berubah-ubah
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

"Dalam contoh di atas, kami mencipta Storagekelas berasingan, memindahkan countdan sumpembolehubah ke dalamnya, dan mengisytiharkannya statik . Pembolehubah statik awam boleh diakses daripada mana-mana kaedah dalam atur cara (dan bukan sahaja daripada kaedah)."

"Saya tidak faham sepenuhnya, tetapi ini nampaknya sesuai untuk saya."

"Begitu juga. Dan kadangkala ia perlu. Tanpa pembolehubah statik dan kaedah kita akan tersekat."

"Mudah-mudahan, saya perlahan-lahan dapat memikirkannya."

"Ya, sudah tentu anda akan."