ตัวแปรท้องถิ่น

"สวัสดี นักเรียนที่รัก ถึงเวลาที่ต้องจริงจังกับตัวแปรมากขึ้น แต่คราวนี้เราจะไม่พูดถึงโครงสร้างภายใน แต่เราจะเน้นไปที่วิธีที่ตัวแปรโต้ตอบกับรหัสที่พวกมันอยู่

"ตัวแปรทั้งหมดที่ถูกประกาศภายในเมธอดเรียกว่าตัวแปรโลคัลตัวแปรโลคัลมีอยู่เฉพาะในบล็อกของโค้ดที่มีการประกาศหรือถ้าจะให้แม่นยำยิ่งขึ้น ตัวแปรนั้นมีอยู่ตั้งแต่วินาทีที่ประกาศจนกระทั่งสิ้นสุดบล็อก ของรหัสที่มีการประกาศ"

"เห็นได้ชัดว่าฉันต้องการตัวอย่าง"

"ไม่มีปัญหา นี่เลย:

รหัส ความพร้อมใช้งานของตัวแปร
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

"มาดูกฎสำหรับการเข้าถึงตัวแปรในเครื่องกันอีกครั้ง นี่คือบล็อกของโค้ด อะไรคือจุดเริ่มต้นและจุดสิ้นสุดของมัน"

"วงเล็บปีกกา?"

"ถูกต้อง นี่อาจเป็นตัวเมธอด ตัวของลูป หรือแค่กลุ่มของโค้ดสำหรับคำสั่งเงื่อนไข ตัวแปรที่ประกาศในกลุ่มของโค้ดมีอยู่จนถึงจุดสิ้นสุดของบล็อกของโค้ดนั้น บอกฉันทีว่าจะ มีตัวแปรอยู่หากมีการประกาศในเนื้อหาของลูปหรือไม่"

"มันจะมีอยู่ในเนื้อความของลูปเท่านั้น"

"ถูกต้อง ยิ่งไปกว่านั้น มันจะถูกสร้างและทำลายในการวนซ้ำแต่ละครั้ง"

"นั่นหมายความว่าคุณไม่สามารถประกาศตัวแปรโลคัลสองตัวที่มีชื่อเดียวกันในเมธอดเดียวได้ — โปรแกรมจะไม่คอมไพล์ แต่คุณสามารถทำได้หากบล็อกของโค้ดที่มีการประกาศตัวแปรไม่ซ้อนทับกัน "

"มีเหตุผลว่าทำไมคุณถึงเป็นคนโปรดของฉัน Amigo ลองดูอีกหนึ่งตัวอย่างเพื่อทำให้สมองของคุณแข็งขึ้น

รหัส การมองเห็นที่เปลี่ยนแปลงได้
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

"เราสามารถประกาศชื่อตัวแปรโลคัลตัวที่สองbได้ เนื่องจากbตัวแปรตัวแรกไม่สามารถมองเห็นได้ในบล็อคโค้ดที่มีbการประกาศตัวแปรตัว ที่สอง

พารามิเตอร์

"อย่างที่เราพูดไปก่อนหน้านี้ แต่ละเมธอดสามารถมีตัวแปรที่เราเรียกว่าพารามิเตอร์ แล้วการมองเห็นและอายุการใช้งานของพวกมันล่ะ?"

"อืม... ฉันอึ้งไปเลย..."

"ทุกอย่างค่อนข้างง่ายที่นี่ พารามิเตอร์ถูกสร้างขึ้นเมื่อขั้นตอนการดำเนินการในเมธอด (เช่น เมื่อโค้ดของเมธอดเริ่มดำเนินการ) พารามิเตอร์จะถูกตัดออกเมื่อเมธอดสิ้นสุดลง"

"กล่าวอีกนัยหนึ่งคือมองเห็นได้ในเนื้อหาทั้งหมดของวิธีการและมีเพียงที่นั่นเท่านั้น"

"ใช่ ตัวอย่าง:

รหัส การมองเห็นที่เปลี่ยนแปลงได้
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

"อย่างที่เราพูดไปก่อนหน้านี้argsเป็นเพียงตัวแปรที่มีประเภทเป็นอาร์เรย์ของสตริง และเช่นเดียวกับพารามิเตอร์ทั้งหมด ตัวแปรนี้มีอยู่ทุกที่ภายในเนื้อหาของเมธอด อย่างไรก็ตาม เรามักจะไม่สนใจมันในตัวอย่างของเรา

ตัวแปรในคลาส

"จำบทเรียนในระดับ 1 ที่เรากล่าวว่าคลาสสามารถมีเมธอดและตัวแปรได้ บางครั้งเมธอดจะเรียกว่าอินสแตนซ์เมธอด และตัวแปร - ตัวแปรอินสแตนซ์หรือฟิลด์

"ตัวแปร (หรือฟิลด์) ของคลาส คือ อะไร

เป็นตัวแปรที่ไม่ได้ประกาศในเมธอด แต่อยู่ในคลาส"

"และพวกเขาอยู่ที่นั่นเพื่ออะไร"

"สำหรับผู้เริ่มต้น พวกมันสามารถเข้าถึงได้จากเมธอดใดๆ (ไม่คงที่) ของคลาส โดยคร่าวๆตัวแปรอินสแตนซ์คือตัวแปรที่ใช้ร่วมกันโดยเมธอดทั้งหมดของคลาส

ตัวอย่าง:

รหัส การมองเห็นที่เปลี่ยนแปลงได้
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

"ในตัวอย่างนี้ เรามีสองวิธี — add()และremove()วิธีadd()การเพิ่มตัวแปรsumและcountอินสแตนซ์ และremove()วิธีการลดsumตัวแปรcountและ ทั้งสองวิธีทำงานกับตัวแปรอินสแตนซ์ที่ใช้ร่วมกัน"

"ฉันเข้าใจทั้งหมดแล้ว! ตัวแปรโลคัลมีอยู่ในขณะที่เมธอดกำลังดำเนินการ ตัวแปรอินสแตนซ์ของคลาสมีอยู่ภายในวัตถุของคลาสตราบใดที่วัตถุนั้นมีอยู่"

"ทำได้ดีมาก Amigo เราได้วางรากฐานบางอย่างแล้ว และคุณจะได้เรียนรู้รายละเอียดเกี่ยวกับวัตถุของชั้นเรียนในระดับต่อไป

ตัวแปรคงที่

"เช่นเดียวกับเมธอด ตัวแปรในคลาสอาจเป็นแบบคงที่หรือไม่คงที่เมธอดแบบคงที่สามารถเข้าถึงเฉพาะตัวแปรแบบคงที่เท่านั้น

"ฉันยังไม่มีความเข้าใจที่ชัดเจนเกี่ยวกับตัวแปรคงที่"

"โอ้ ฉันรู้ แต่ไม่ต้องกังวล สำหรับตอนนี้ ทำความคุ้นเคยกับพวกเขา ทำความคุ้นเคยกับพวกเขา ในระดับ 11 เราจะวิเคราะห์โครงสร้างของตัวแปรคงที่และวิธีการ และคุณจะเข้าใจเหตุผลของสิ่งเหล่านี้ ข้อ จำกัด.

"ในการสร้างตัวแปรสแตติก (ตัวแปรคลาส) คุณต้องเขียนstaticคำสำคัญในการประกาศ

"ตัวแปรสแตติกไม่ได้ผูกมัดกับออบเจกต์หรืออินสแตนซ์ของคลาสที่ประกาศไว้ แต่เป็นของคลาสเอง นั่นเป็นเหตุผลว่าทำไมจึงมีอยู่แม้ว่าจะไม่มีการสร้างอ็อบเจกต์เดียวของคลาสก็ตาม คุณสามารถอ้างอิงถึง จากคลาสอื่นโดยใช้โครงสร้างเช่น:

ClassName.variableName

ตัวอย่าง:

รหัส การมองเห็นที่เปลี่ยนแปลงได้
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

"ในตัวอย่างข้างต้น เราสร้างStorageคลาสแยกต่างหาก ย้ายcountและsumตัวแปรเข้าไป และประกาศให้เป็นสแตติกตัวแปรสแตติกสาธารณะสามารถเข้าถึงได้จากเมธอดใดก็ได้ในโปรแกรม (ไม่ใช่จากเมธอดเท่านั้น)"

"ฉันไม่เข้าใจอย่างถ่องแท้ แต่สิ่งนี้ดูเหมือนจะสะดวกสำหรับฉัน"

"มันก็เป็นเช่นนั้น และบางครั้งก็จำเป็น หากไม่มีตัวแปรคงที่และเมธอด เราคงติดอยู่"

“หวังว่าฉันจะค่อยๆ เข้าใจมันได้”

"ใช่ แน่นอน คุณจะทำ"