ตัวแปรคงที่คืออะไร?

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

ตัวอย่างตัวแปรคงที่ใน Java

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

ตัวอย่าง

// BankAccount class definition
class BankAccount {
  // Declare static variable nextAccountNumber
  static int nextAccountNumber = 1001;

  // Declare instance variables for accountNumber and balance.
  int accountNumber;
  double balance;

  // BankAccount constructor that assigns unique account number to each instance
  BankAccount() {
    // Assign the current value of nextAccountNumber to accountNumber.
    accountNumber = nextAccountNumber;

    // Increment nextAccountNumber for the next BankAccount object.
    nextAccountNumber++;
  }

  // Method to get the account number of this BankAccount object.
  int getAccountNumber() {
    return accountNumber;
  }

  // Method to get the balance of this BankAccount object.
  double getBalance() {
    return balance;
  }

  // Method to deposit an amount into this BankAccount object.
  void deposit(double amount) {
    // Increase balance by the amount deposited.
    balance += amount;
  }

  // Method to withdraw an amount from this BankAccount object.
  void withdraw(double amount) {
    // Decrease balance by the amount withdrawn.
    balance -= amount;
  }
}

// Main method definition
class Main {
  static void main(String[] args) {
    // Create three BankAccount objects: account1, account2, and account3.
    BankAccount account1 = new BankAccount();
    BankAccount account2 = new BankAccount();
    BankAccount account3 = new BankAccount();

    // Display the value of the static variable nextAccountNumber after creating each BankAccount object.
    System.out.println("Value of nextAccountNumber after creating account1: " + account1.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account2: " + account2.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account3: " + account3.getAccountNumber());
  }
}

เอาท์พุต

ค่าของ nextAccountNumber หลังจากสร้าง account1: 1001 ค่าของ nextAccountNumber หลังจากสร้าง account2: 1002 ค่าของ nextAccountNumber หลังจากสร้าง account3: 1003
ในตัวอย่างนี้ วิธีการหลักสร้างสามอินสแตนซ์ของคลาสBankAccount ตัวสร้าง BankAccount กำหนดnextAccountNumberให้กับบัญชีใหม่ และเพิ่ม ตัวแปร nextAccountNumberขึ้น 1 วิธี getAccountNumberส่งกลับหมายเลขบัญชีของแต่ละบัญชี วิธีการหลักจะพิมพ์หมายเลขบัญชีและ ตัวแปร nextAccountNumberสำหรับแต่ละบัญชี คุณจะเห็นว่าหมายเลขบัญชีแต่ละหมายเลขไม่ซ้ำกัน และ ตัวแปร nextAccountNumberจะเพิ่มขึ้นทีละหนึ่งบัญชีสำหรับแต่ละบัญชีใหม่ที่สร้างขึ้น ตัวแปรคงที่ยังสามารถใช้เพื่อนำรูปแบบการออกแบบซิงเกิลตันไปใช้ ซึ่งสามารถสร้างอินสแตนซ์ของคลาสได้เพียงอินสแตนซ์เดียวเท่านั้น คลาสซิงเกิลตันคือคลาสที่สามารถมีได้เพียงอินสแตนซ์เดียวใน แอปพลิเคชัน Java ใดๆ และจัดเตรียมจุดเข้าถึงส่วนกลางให้กับอินสแตนซ์นี้พร้อมกัน ข้อมูลโค้ดต่อไปนี้แสดงวิธีการใช้ อินสแตน ซ์ ตัวแปรคงที่เพื่อนำคลาสซิงเกิลตันไปใช้:

ตัวอย่าง

public class Singleton {
    // using static variable in the singleton class
    private static Singleton instance;
    private Singleton() { }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void displayMessage() {
        System.out.println("This is a singleton class");
    }

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        singleton1.displayMessage();

        Singleton singleton2 = Singleton.getInstance();
        singleton2.displayMessage();

        Singleton singleton3 = Singleton.getInstance();
        singleton3.displayMessage();
    }
}

เอาท์พุต

นี่คือคลาสซิงเกิลตัน นี่คือคลาสซิงเกิลตัน นี่คือคลาสซิงเกิลตัน
ในตัวอย่างนี้ เมธอด main จะสร้างคลาส Singletonสามอินสแตนซ์โดยการเรียกเมธอดgetInstance() เมธอดgetInstance()จะส่งคืนอินสแตนซ์ของคลาสและสร้างอินสแตนซ์ใหม่หากไม่มีอยู่ เมธอดdisplayMessageเพียงพิมพ์ข้อความ จากนั้น เมธอด หลักจะเรียก เมธอด displayMessageสำหรับแต่ละอินสแตนซ์ อย่างที่คุณเห็น แม้ว่าเรากำลังสร้างสามอินสแตนซ์ แต่มีการสร้างและแชร์ออบเจ็กต์เพียงรายการเดียวระหว่างอินสแตนซ์ทั้งหมด มันพิสูจน์ได้ว่ามีเพียงอินสแตนซ์เดียวของคลาสเท่านั้นที่ถูกสร้างขึ้นและแบ่งปันระหว่างอินสแตนซ์ทั้งหมดและมี 'อินสแตนซ์' ตัวแปรคงที่อยู่ สิ่งสำคัญคือต้องจำไว้ว่าค่าของตัวแปรคงที่จะถูกแชร์ระหว่างอินสแตนซ์ทั้งหมดของคลาส ดังนั้นการเปลี่ยนแปลงในตัวแปรที่ทำโดยอินสแตนซ์หนึ่งจะมองเห็นได้ในอินสแตนซ์อื่นๆ ทั้งหมด ควรพิจารณาตัวแปรคงที่อย่างรอบคอบเพื่อหลีกเลี่ยงข้อขัดแย้งและข้อบกพร่องที่อาจเกิดขึ้นในโค้ดของคุณ ตัวอย่างเช่น ไม่แนะนำให้ใช้ตัวแปรคงที่เพื่อเก็บค่าที่เฉพาะเจาะจงสำหรับอินสแตนซ์ของคลาส เช่น ยอดคงเหลือในบัญชี เพื่อเสริมสิ่งที่คุณเรียนรู้ เราขอแนะนำให้คุณชมบทเรียนวิดีโอจากหลักสูตร Java ของเรา

บทสรุป

เพื่อสรุปสิ่งนี้ตัวแปรคงที่ใน Java อนุญาตให้มีการแบ่งปันข้อมูลระหว่างอินสแตนซ์ทั้งหมดของคลาส สามารถใช้กับตัวแปรที่แชร์ระหว่างทุกอินสแตนซ์ เช่น ตัวนับ และค่าคงที่ หรือเพื่อใช้รูปแบบการออกแบบ Singleton อย่างไรก็ตาม สิ่งสำคัญคือต้องจำไว้ว่าค่าของตัวแปรคงที่จะถูกแชร์ระหว่างอินสแตนซ์ทั้งหมดของคลาส ดังนั้นการเปลี่ยนแปลงในตัวแปรที่ทำโดยอินสแตนซ์หนึ่งจะปรากฏแก่อินสแตนซ์อื่นๆ ทั้งหมด