静的キーワード: Java での静的変数のデコード

Susan Sarandon
リリース: 2024-10-21 20:12:02
オリジナル
981 人が閲覧しました

Static Keyword: Decoding Static Variables in Java

Java Keywords Essentials シリーズへようこそ!この投稿は、静的変数 に関するものです。これは、同じクラスの複数のオブジェクト間でデータを共有できる Java の強力な機能です。

静的変数の目的、動作、主な使用例について、実際の例と洞察を交えて説明します。 別の投稿では、コンテンツが多すぎて圧倒されないよう、静的メソッドについて詳しく説明します。

この投稿は、以前の投稿で説明した概念に基づいています。ここで取り上げるトピックをより深く理解するために、最終キーワードと静的ブロックを確認することをお勧めします。


静的変数とは何ですか?

静的変数は、個々のインスタンスではなくクラスに属します。これはクラスのすべてのオブジェクト間で共有され、これらのオブジェクト全体で同じ値を保持します。

主な特徴

  1. クラスレベル変数: クラスのすべてのインスタンスによって共有されます。
  2. 1 回初期化: クラスが JVM によってロードされるとき。
  3. メモリの場所: メソッド領域に保存されます。
  4. アクセス: クラス名オブジェクト参照の両方を使用してアクセスできます(ただし、クラス名が優先されます)。

コード例: 静的変数の動作

package keywords.static_keyword;

public class StaticVariables {

    // Static variable: Shared across all instances of the class
    // Automatically initialized to default value on class loading
    static int idCounter; // int default value -> 0

    // Static final variables
    // Must be initialized at declaration or in a static block
    static final String COMPANY_NAME = "TechCorp";
    static final String OFFICE_CODE;

    // Instance variables: Unique to each object
    int employeeId;
    String employeeName;

    // Static final variable Initialized in a static block
    static {
       // Default region: US
       String region = System.getProperty("user.region", "US");
        switch (region) {
            case "EU":
                regionalOfficeCode = "EU-01";
                break;
            case "APAC":
                regionalOfficeCode = "AP-11";
                break;
            default:
                regionalOfficeCode = "US-00";
        }
        System.out.println("Static Block Invoked: Office Code set to " +
        regionalOfficeCode);
    }

    // Constructor: Assigns a unique ID to each object
    public StaticVariables(String name) {
        this.employeeName = name;
        this.employeeId = ++idCounter; // Incrementing the shared counter
    }

    // Instance method
    // Displays instance details along with shared data(static variables)
    void displayEmployeeDetails() {
        System.out.println("Employee ID: " + employeeId + 
            ", Name: " + employeeName + 
            ", Company: " + COMPANY_NAME +
            ", Office Code: " + OFFICE_CODE);
    }

    public static void main(String[] args) {
        // Creating instances to observe static variable behavior
        StaticVariables emp1 = new StaticVariables("Alice");
        StaticVariables emp2 = new StaticVariables("Bob");

        emp1.displayEmployeeDetails();
        emp2.displayEmployeeDetails();

        // Accessing the static variable directly using the class name
        System.out.println("Total Employees: " + StaticVariables.idCounter);
    }
}
ログイン後にコピー
ログイン後にコピー

コードの説明

出力:

Static Block Invoked: Office Code set to US-00
Employee ID: 1, Name: Alice, Company: TechCorp, Office Code: US-00
Employee ID: 2, Name: Bob, Company: TechCorp, Office Code: US-00
Total Employees: 2
ログイン後にコピー

実証された主要な概念:

  1. 静的変数:

    • すべてのインスタンスで共有され、インスタンス間でその値が保持されます。
    • 例: idCounter は作成された従業員の数を追跡します。
  2. 静的最終変数:

    • 値が一度割り当てられると変更されない定数。
    • 例: COMPANY_NAME と OFFICE_CODE。
  3. 静的ブロック:

    • クラスがロードされるときに1回実行します
    • 環境設定に基づいて、OFFICE_CODE などの複雑な静的変数を初期化するために使用されます。
  4. インスタンス変数とメソッド:

    • 各インスタンスには、employeeId とemployeeName の一意の値があります。
  5. 静的変数へのクラスレベルのアクセス:

    • idCounter にはクラス名を使用してアクセスします。
    package keywords.static_keyword;
    
    public class StaticVariables {
    
        // Static variable: Shared across all instances of the class
        // Automatically initialized to default value on class loading
        static int idCounter; // int default value -> 0
    
        // Static final variables
        // Must be initialized at declaration or in a static block
        static final String COMPANY_NAME = "TechCorp";
        static final String OFFICE_CODE;
    
        // Instance variables: Unique to each object
        int employeeId;
        String employeeName;
    
        // Static final variable Initialized in a static block
        static {
           // Default region: US
           String region = System.getProperty("user.region", "US");
            switch (region) {
                case "EU":
                    regionalOfficeCode = "EU-01";
                    break;
                case "APAC":
                    regionalOfficeCode = "AP-11";
                    break;
                default:
                    regionalOfficeCode = "US-00";
            }
            System.out.println("Static Block Invoked: Office Code set to " +
            regionalOfficeCode);
        }
    
        // Constructor: Assigns a unique ID to each object
        public StaticVariables(String name) {
            this.employeeName = name;
            this.employeeId = ++idCounter; // Incrementing the shared counter
        }
    
        // Instance method
        // Displays instance details along with shared data(static variables)
        void displayEmployeeDetails() {
            System.out.println("Employee ID: " + employeeId + 
                ", Name: " + employeeName + 
                ", Company: " + COMPANY_NAME +
                ", Office Code: " + OFFICE_CODE);
        }
    
        public static void main(String[] args) {
            // Creating instances to observe static variable behavior
            StaticVariables emp1 = new StaticVariables("Alice");
            StaticVariables emp2 = new StaticVariables("Bob");
    
            emp1.displayEmployeeDetails();
            emp2.displayEmployeeDetails();
    
            // Accessing the static variable directly using the class name
            System.out.println("Total Employees: " + StaticVariables.idCounter);
        }
    }
    
    ログイン後にコピー
    ログイン後にコピー

静的変数を使用する場合

  1. グローバル カウンター: ID ジェネレーターカウンター などの一般的な状態を追跡するのに役立ちます。
  2. 構成設定: アプリケーション レベルの構成 など、一定のままの値を保存します。
  3. キャッシュ: 静的変数を使用して、頻繁に使用されるデータをキャッシュします (メモリを適切に管理するように注意してください)。

結論

この投稿では、インスタンス間での共有状態を可能にする基本的な機能である静的変数について説明しました。静的変数を理解すると、特に複数のオブジェクト間で一貫性を保つ必要があるデータを管理する場合に、より効率的なコードを作成するのに役立ちます。

次の投稿では、静的メソッドについて詳しく説明し、その動作、制限、ベスト プラクティスを探ります。


関連記事

  • Java の基礎

  • アレイインタビューの要点

  • Java メモリの基礎

  • コレクション フレームワークの基本

コーディングを楽しんでください!

以上が静的キーワード: Java での静的変数のデコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!