CodeGym /وبلاگ جاوا /Random-FA /متغیرهای استاتیک در جاوا
John Squirrels
مرحله
San Francisco

متغیرهای استاتیک در جاوا

در گروه منتشر شد

متغیرهای استاتیک چیست؟

متغیرهای استاتیک یا متغیرهای کلاس در بین تمام نمونه‌های یک کلاس به اشتراک گذاشته می‌شوند و می‌توان بدون ایجاد نمونه‌ای از کلاس به آنها دسترسی پیدا کرد و تغییر داد. بیایید یک شیرجه عمیق داشته باشیم تا کاربردها و پیاده سازی متغیرهای استاتیک در جاوا را درک کنیم.

مثال متغیر استاتیک در جاوا

یکی از رایج ترین کاربردهای متغیرهای استاتیک ، اشتراک گذاری بین تمام نمونه های یک کلاس است. به عنوان مثال، یک متغیر شمارنده که تعداد نمونه های ایجاد شده را ردیابی می کند، یا یک متغیر 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 پس از ایجاد حساب1: 1001 مقدار nextAccountNumber پس از ایجاد حساب2: 1002 ارزش nextAccountNumber پس از ایجاد حساب3: 1003
در این مثال، متد main سه نمونه از کلاس BankAccount را ایجاد می کند . سازنده BankAccount nextAccountNumber را به حساب جدید اختصاص می دهد و متغیر nextAccountNumber را 1 افزایش می دهد . روش getAccountNumber شماره حساب هر حساب را برمی گرداند. سپس روش اصلی شماره حساب و متغیر nextAccountNumber را برای هر حساب چاپ می کند. می بینید که هر شماره حساب منحصر به فرد است و متغیر nextAccountNumber برای هر حساب جدید ایجاد شده یک عدد افزایش می یابد. همچنین می‌توان از متغیرهای استاتیک برای پیاده‌سازی الگوی طراحی Singleton استفاده کرد، جایی که تنها یک نمونه از یک کلاس می‌تواند ایجاد شود. کلاس singleton کلاسی است که می تواند تنها یک نمونه در هر برنامه جاوا داشته باشد و به طور همزمان یک نقطه دسترسی جهانی به این نمونه ارائه می دهد. قطعه کد زیر نشان می دهد که چگونه می توان از یک نمونه متغیر استاتیک برای پیاده سازی یک کلاس singleton استفاده کرد:

مثال

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 با فراخوانی متد ()getInstance سه نمونه از کلاس Singleton ایجاد می کند . متد getInstance() نمونه کلاس را برمی گرداند و در صورت عدم وجود یک نمونه جدید ایجاد می کند. روش displayMessage فقط یک پیام را چاپ می کند . سپس متد اصلی برای هر نمونه متد displayMessage را فراخوانی می کند . همانطور که می بینید، با وجود اینکه ما در حال ایجاد سه نمونه هستیم، تنها یک شی ایجاد می شود و بین تمام نمونه ها به اشتراک گذاشته می شود. ثابت می کند که تنها یک نمونه از کلاس ایجاد شده و بین همه نمونه ها به اشتراک گذاشته شده است و متغیر استاتیک 'instance' در حال برگزاری است. مهم است که به یاد داشته باشید که مقدار یک متغیر استاتیک بین تمام نمونه‌های یک کلاس مشترک است، بنابراین تغییرات ایجاد شده در متغیر توسط یک نمونه برای همه نمونه‌های دیگر قابل مشاهده است. برای جلوگیری از تضادها و اشکالات احتمالی در کد، باید به متغیرهای استاتیک توجه دقیق داشت. به عنوان مثال، استفاده از یک متغیر استاتیک برای نگهداری مقداری که مخصوص نمونه ای از یک کلاس است، مانند موجودی حساب، توصیه نمی شود. برای تقویت آموخته هایتان، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید

نتیجه

برای جمع بندی این موضوع، یک متغیر استاتیک در جاوا امکان اشتراک گذاری داده ها را در بین تمام نمونه های یک کلاس فراهم می کند. آنها را می توان برای متغیرهای مشترک بین همه نمونه ها، مانند شمارنده ها و ثابت ها یا برای پیاده سازی الگوی طراحی Singleton استفاده کرد. با این حال، مهم است که به خاطر داشته باشید که مقدار یک متغیر استاتیک بین تمام نمونه‌های یک کلاس مشترک است، بنابراین تغییرات ایجاد شده در متغیر توسط یک نمونه برای همه نمونه‌های دیگر قابل مشاهده است.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION