ホームページ  >  記事  >  Java  >  静的キーワード: メソッド内の静的メンバーと非静的メンバーへのアクセス

静的キーワード: メソッド内の静的メンバーと非静的メンバーへのアクセス

DDD
DDDオリジナル
2024-10-25 00:39:30830ブラウズ

Static Keyword: Accessing Static and Non-Static Members in Methods

この投稿では、メソッドが静的および非静的メンバーとどのように相互作用するか、および静的ローカル変数が相互作用しない理由に焦点を当てます。許可された。これは面接でよくあるトピックであり、Java 開発者にとって重要な概念です。

この投稿は、このシリーズの以前の投稿で説明した概念に基づいて構築されています。 static キーワードを初めて使用する場合は、ここで説明するトピックに入る前に、より良い基礎を得るために Static Block と Static Variables を確認することをお勧めします。


静的メソッドとメンバーの概要

  • 静的メンバー (変数またはメソッド) は、クラスのインスタンスではなく、クラス に属します。
  • 非静的メンバーは、特定のオブジェクトに関連付けられており、各インスタンスに固有です。

静的メソッドはクラス レベルで動作するため、インスタンス メンバーに直接アクセスできません。


静的アクセスと非静的アクセスをデモするプログラム:

package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}

主要な概念とアクセス ルール

1. Java では静的ローカル変数が許可されないのはなぜですか?

Java では、メソッドまたはブロック内で 静的ローカル変数 を使用できません。

  • 理由:
    • ローカル変数はメソッドの スタック フレーム に属し、メソッドの呼び出し時に作成されます。
    • ただし、
    • 静的変数はクラスレベルのメンバーであり、クラスのライフサイクル全体にわたってアクセスできる必要があります。
    • メソッド内で 静的変数 を許可すると、メソッドのローカル変数の有効期間がメソッドの実行に関連付けられているため、矛盾が発生します。
package keywords.static_keyword;

public class StaticVariables {

    // Static and non-static variables
    static int idStatic = 1;  // Shared across all instances
    int id;                   // Unique to each instance
    String name;              // Unique to each instance

    // Static block – Runs once when the class is loaded
    static {
        displayStatic();  // Call to static method

        // Cannot access non-static method in static block
        display(); // --> Compilation error
    }

    // Constructor to initialize non-static variables
    public StaticVariables(String name) {
        this.id = ++idStatic;  // Increment static ID for every new instance
        this.name = name;
    }

    // Non-static method: Can access both static and non-static members
    void display() {
        System.out.println("Instance Method:");
        System.out.println("Static ID: " + idStatic + ", Instance ID: " +
        id + ", Name: " + name);
    }

    // Static method: Can only access static members directly
    static void displayStatic() {
        System.out.println("Static Method:");
        System.out.println("Static ID: " + idStatic);

        // Static local variables are not allowed
        static int localVar = 10; // --> Compilation error
    }

    public static void main(String[] args) {
        // Call static method directly
        displayStatic();

        // Create instances to access non-static methods
        StaticVariables obj1 = new StaticVariables("Object1");
        StaticVariables obj2 = new StaticVariables("Object2");

        // Access non-static methods through objects
        obj1.display();
        obj2.display();
    }
}

2.静的メソッド

  • 静的変数およびその他の静的メソッドに直接アクセスできます。
  • 非静的メンバーには直接アクセスできません (静的コンテキストにはオブジェクトが存在しないため)。

3.非静的メソッド

  • 静的メンバーと非静的メンバーの両方にアクセスできます
  • この柔軟性は、非静的メソッドがオブジェクト インスタンスに属し、クラス レベルとインスタンス レベルのデータの両方にアクセスできるため存在します。

4.静的ブロック

  • クラスが JVM によってロードされるときに 1 回実行
  • 静的メソッドを呼び出すことはできますが、この時点では使用可能なオブジェクトがないため、非静的メソッドを直接呼び出すことはできません。

プログラム出力

static void displayStatic() {
    static int localVar = 10; // --> Compilation error
}

ルールの概要

Context Access Static Members Access Non-Static Members Allow Static Local Variables?
Static Method Yes No No
Non-Static Method Yes Yes No
Static Block Yes No No
コンテキスト 静的メンバーへのアクセス 非静的メンバーへのアクセス 静的ローカル変数を許可しますか? 静的メソッド はい いいえ いいえ 非静的メソッド はい はい いいえ 静的ブロック はい いいえ いいえ テーブル>

静的メソッドを使用するのはどのような場合ですか?

  • ユーティリティまたはヘルパー関数: 例: Math.pow()。
  • インスタンス データが必要ない場合: オブジェクトの状態に依存しない操作。

結論

静的メソッドと静的メンバーは Java の重要なツールです。重要なポイントは次のとおりです:

  • 静的メソッド はクラス レベルで動作し、静的メンバーにのみ直接アクセスできます。
  • 非静的メソッド は、静的メンバーと非静的メンバーの両方にアクセスできます。
  • 静的ローカル変数は Java では許可されません。メソッドのスコープと静的有効期間の間に矛盾があるためです。

これらのルールを理解することで、プログラム内で静的メソッドを効果的に使用できるようになります。


関連記事

  • Java の基礎

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

  • Java メモリの基礎

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

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

以上が静的キーワード: メソッド内の静的メンバーと非静的メンバーへのアクセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。