โดยปกติสมาชิกคลาสจะต้องเข้าถึงได้ร่วมกับวัตถุของคลาส จะมีบางครั้งที่คุณต้องการกำหนดสมาชิกคลาสที่สามารถเข้าถึงได้โดยไม่ต้องสร้างอินสแตนซ์ของคลาสนั้น สิ่งนี้สามารถทำได้โดย 'คงที่' หากต้องการสร้างสมาชิกดังกล่าวให้นำหน้าการประกาศด้วยคำหลัก "คงที่"
ข้อดีของการคงที่
เมื่อสมาชิกได้รับการประกาศคงที่มันสามารถเข้าถึงได้ก่อนที่วัตถุใด ๆ ของระดับของมันจะถูกสร้างขึ้นหรือไม่มีการอ้างอิงไปยังวัตถุใด ๆ
ทำไมเราถึงประกาศ main () เป็น static?
main () เป็นจุดเริ่มต้นของคลาส ในจาวาทุกสิ่งที่เขียนในชั้นเรียน ตอนนี้เมื่อคุณเรียกใช้ชื่อไฟล์ java บนพรอมต์คำสั่งโหลดเดอร์จะโหลดคลาสและ JVM จะค้นหาวิธีการหลักเพื่อเข้าสู่คลาส ดังนั้นการสร้าง main () เป็น static จะทำให้ JVM เข้าถึงได้โดยตรงผ่าน classname.main ()
นั่นคือสาเหตุที่ชื่อโปรแกรมจะต้องตรงกับชื่อคลาสที่เราเขียนฟังก์ชั่นหลัก
จุดสำคัญที่ต้องจำ
- ตัวแปรอินสแตนซ์ที่ประกาศเป็นแบบสแตติกเป็นตัวแปรระดับโลก เมื่อคุณสร้างออบเจ็กต์ของคลาสนั้นจะไม่มีการคัดลอกตัวแปรสแตติก แม้แต่วัตถุทั้งหมดก็ยังคงมีตัวแปรสแตติกเดียวกัน
- ตัวแปรคงที่หรือฟังก์ชั่นสมาชิกจะโหลดระหว่างชั้นเรียน นั่นหมายถึงก่อนที่จะสร้างอินสแตนซ์ (วัตถุ) ใด ๆ ฟังก์ชั่นหลักคือฟังก์ชั่นที่ทำงานได้ครั้งแรกของโปรแกรมใด ๆ ที่เราเรียกใช้ด้วยตนเอง
- หากคุณต้องการได้รับบางสิ่งที่ถูกเรียกใช้ / การกำหนดค่าเริ่มต้นของตัวแปรสแตติกก่อนที่จะโหลดคลาสจริงให้ใส่ทั้งหมดในบล็อกแบบสแตติก
เช่น.
คงที่{
System.out.println (“ บล็อกเริ่มต้นคงที่…”);
}
มันจะถูกดำเนินการก่อนเมธอด main () ระหว่างการโหลดคลาส
ข้อ จำกัด ขณะใช้งานสแตติก
- วิธีการคงที่สามารถเข้าถึงตัวแปรคงที่เท่านั้น
- วิธีการแบบคงที่สามารถเรียกใช้วิธีการแบบคงที่เท่านั้น
- วิธีการคงที่ไม่สามารถอ้างถึงสิ่งนี้และวิธีการสุดยอดได้
โปรแกรม
class Addition{ static int num1; static int num2; int a; int b; Addition(){ num1 = -1; num2 = -1; a = -1; b = -1; } Addition(int num1,int num2,int a,int b){ this.num1 = num1; this.num2 = num2; this.a = a; this.b = b; } static void sum(){ //System.out.println("Sum of 4 numbers is: "+(num1+num2+a+b)); /*static method can’t access static vars */ System.out.println("Sum of 'num1' and 'num2' is: "+(num1+num2)); System.out.println(); } void add(){ System.out.println("Addition of 4 numbers is: "+(num1+num2+a+b)); System.out.println(); } } class AditionDemo1{ public static void main(String args[]){ System.out.println(); System.out.println("Static method sum() called without creating any object"); System.out.println("------------------------------------------------------"); Addition.sum(); Addition ad1 = new Addition(); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad1"); System.out.println("-----------------------------------------------"); ad1.add(); Addition ad2 = new Addition(10,20,30,40); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad2"); System.out.println("-----------------------------------------------"); ad2.add(); System.out.println("Static Method sum() is invoked third time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Static Method sum() is invoked using Object"); System.out.println("-------------------------------------------"); ad1.sum(); ad2.sum(); } }
เอาท์พุต
คำอธิบายของรหัส Java & ผลผลิต
หากคุณเห็นรหัสอย่างระมัดระวังแล้วคุณจะพบเราได้รับสองตัวแปรคงที่และสองตัวแปรไม่คงที่ซึ่งเริ่มต้นได้โดยสอง constructors ได้แก่ อันหนึ่งถูกกำหนดพารามิเตอร์และอีกอันหนึ่งเป็นค่าเริ่มต้น เราได้กำหนดวิธีคงที่หนึ่งวิธีและวิธีไม่คงที่หนึ่งวิธี
ใน main () อันดับแรกเราได้เรียกใช้ผลรวมของ static method () โดยไม่ต้องสร้างวัตถุใด ๆ ของ Addition Class
ในรหัสคุณจะเห็นว่าวิธีการคงที่ไม่สามารถเข้าถึงตัวแปรที่ไม่คงที่ได้ หากคุณพยายามเข้าถึงคุณจะได้รับข้อผิดพลาดต่อไปนี้ตามที่เราได้รับ:
ตอนนี้ถ้าคุณเห็นตัวแปรสแตติกเป็นตัวแปรโกลบอลเท่านั้น โดยไม่คำนึงถึงวัตถุที่ให้ผลลัพธ์แบบเดียวกันทุกครั้งที่มีการเรียกใช้ผลรวมของวิธีการคงที่ () โดยวัตถุใด ๆ
วิธีการไม่คงที่สามารถเข้าถึงตัวแปรคงที่
วิธีการไม่คงที่สามารถเรียกใช้วิธีการคงที่
เมธอดสแตติกสามารถเรียกใช้ด้วย <classname>. <ชื่อเมธอดแบบสแตติก> และด้วย <objectname>. <ชื่อเมธอดแบบสแตติก> เช่นกัน
สำหรับตัวแปรที่ไม่คงที่แต่ละวัตถุจะมีสำเนาของตัวแปรที่ไม่คงที่ที่มีค่าแตกต่างกันสำหรับวัตถุที่แตกต่างกัน
ต่อไปเราจะเรียนรู้เกี่ยวกับ วิธีใช้คีย์เวิร์ด“ this” ใน Java.
ชำระเงินบทเรียนที่มีประโยชน์มากขึ้นและแนวทางที่ชัดเจนในการเขียนโปรแกรม Java ที่นี่
ความคิดเห็น