Java の「static」の魔法: 1 つは全員のために、そして全員は 1 のために!

WBOY
リリース: 2024-09-10 18:30:18
オリジナル
499 人が閲覧しました

The Magic of `static` in Java: One for All, and All for One!

正直に言うと、静的キーワードに初めて出会ったとき、誰もが次のように考えます。「これはどんな魔術ですか?」 ?でも心配しないでください。ここでは、シンプルで奥深く、そしておそらく少し楽しい方法でそれを詳しく説明します!

あなたがパーティーにいるところを想像してみてください?あなたもあなたの友達もみんな帽子をかぶっています。しかし、全員が共有しなければならない帽子は 1 つ だけです。これは基本的に Java で static キーワードが行うことです。友達ごとに帽子を作成する (面倒になる可能性があります) 代わりに、グループ (クラス) に属する帽子を 1 つ 用意し、全員が順番にそれをかぶることができます。

このイメージを念頭に置いたところで、Java における static が実際に何をするのかを詳しく見ていきましょう。


静的とはどういう意味ですか?

簡単に言えば、Java で static キーワードを使用すると、「ここにあるこれは、そのクラスの特定のオブジェクトではなく、クラス自体に属している」と言っていることになります。

これは次のことを意味します:

  1. オブジェクトは不要: 静的変数または静的メソッドを使用するためにオブジェクトを作成する必要はありません。直接電話してください!
  2. すべてのオブジェクトで共有: オブジェクトを作成すると、すべてのオブジェクトが同じ静的なものを共有します。 1 つの変更は全員に影響を与えます。まるで世界的なパーティーハット?!

静的変数: パーティーハット ?

静的変数は、誰もが共有する 1 つの帽子のようなものです。帽子を変えると (例: 羽根を入れるなど)、全員がその変化を目にします。

例:

class Party {
    static int numberOfGuests = 0; // static variable

    Party() {
        numberOfGuests++;  // Increment the guest count every time someone joins the party
    }
}

public class Main {
    public static void main(String[] args) {
        Party guest1 = new Party();
        Party guest2 = new Party();
        Party guest3 = new Party();

        System.out.println(Party.numberOfGuests);  // Output: 3 ?
    }
}
ログイン後にコピー

この例では、すべてのゲストがnumberOfGuests変数を共有します。新しいゲストはそれぞれ、独自のゲスト数を取得しません (混乱を想像してください!)。代わりに、全員が同じカウントを更新します。さて、何人のゲストが到着しても、ゲスト数は 1 つ だけであり、それは個々のゲストではなく パーティー クラス に属します。


静的メソッド: ピザの配達員 ?

静的メソッドはパーティーのピザの配達員のようなものです。電話をかけると、招待状 (オブジェクト) を必要とせずに現れます。パーティーの数に関係なく、同じピザ屋が全員にピザを配達します。ピザ屋 (クラス) に電話するだけで、彼らが来てくれます!

例:

class PizzaShop {
    static void deliverPizza() {
        System.out.println("Pizza delivered! ?");
    }
}

public class Main {
    public static void main(String[] args) {
        PizzaShop.deliverPizza();  // No need to create a PizzaShop object
    }
}
ログイン後にコピー

上記の例では、ピザを入手するために PizzaShop オブジェクトを作成する必要はありません。クラスからメソッドを直接呼び出しました。だって、お腹が空くたびにお店を作りたいと思うのはなぜですか?


静的ブロック: DJ のサウンド チェック ?

パーティーが始まる前にDJがサウンドチェックをしますよね?これは静的ブロックのようなものです。すべてが適切に配置されていることを確認するために、何かが起こる前に1 回実行されます。

例:

class Party {
    static String music;

    // Static block to set up the DJ's playlist ?
    static {
        music = "Let's Dance by David Bowie";
        System.out.println("Music is set up: " + music);
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("Party is starting with: " + Party.music);
    }
}
ログイン後にコピー

静的ブロックは、パーティが開始されるに実行されます。音楽は事前に設定されているため、ゲストが到着したときにはすでに興奮しています?


静的入れ子クラス: VIP エリア ?

静的ネストされたクラスは、パーティーの VIP セクションのようなものです。彼らはメイン イベント内にいますが、独立しています。VIP セクションにアクセスするためにパーティーを作成する必要はありません。

例:

class Party {
    static class VIPArea {
        void exclusiveService() {
            System.out.println("Welcome to the VIP area! ?");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Party.VIPArea vip = new Party.VIPArea();  // No need for a Party object
        vip.exclusiveService();  // Output: Welcome to the VIP area! ?
    }
}
ログイン後にコピー

VIP エリアはパーティーの一部ですが、それを使用するのに本格的なパーティーは必要ありません。それは独立したもので、荒れ狂うイベントの中にあるクールで静かな VIP ラウンジのようなものです。


静的を使用する理由

さて、あなたは次のように考えているかもしれません。「これはとても素晴らしいことですが、実際に静的をいつ使用すればよいでしょうか?」 さて、これがチートシートです:

  1. 定数の場合: 決して変化しないもの (Pi など)。定数には static Final を使用します。例: staticfinal double PI = 3.14159;
  2. ユーティリティ メソッドの場合: オブジェクトの状態に依存しない関数。 Math.pow().
  3. について考えてみましょう。
  4. 共有データの場合: 何かが作成された回数を数えるなど、クラスのすべてのインスタンスが値を共有する必要がある場合。
  5. 効率化のため: オブジェクトが必要ないときはオブジェクトを作成しないでください。代わりに静的メソッドまたは変数を使用してください!

舞台裏: 静電気はどのように機能するのか? ?️

さて、カーテンの後ろを覗いてみましょう。魔法がどのように起こるかは次のとおりです:

  1. メモリ管理: 静的変数とメソッドは、メモリの メソッド領域 に存在します (オブジェクトが存在するヒープ内ではありません)。つまり、クラスが最初にロードされるときに1 回ロードされ、プログラムが終了するまでそこに留まります。
  2. 初期化: 静的変数とブロックは、クラスがメモリにロードされるときに初期化されます(オブジェクトの作成時ではありません)。したがって、オブジェクトが作成される前に使用する準備ができています。
  3. アクセス: 静的変数やメソッドは特定のオブジェクトではなくクラスに属しているため、それらにアクセスするためにオブジェクトは必要ありません。

ゲストが到着する前にスナックテーブルを準備するようなものです。各ゲストに自分の食べ物を持ってくるように頼む必要はありません。共有の軽食を自分で食べるだけです。


注意: やりすぎないでください。 ?

ほとんどのことと同様、静電気が多すぎると悪影響が生じる可能性があります。以下にいくつかの警告があります:

  • オブジェクトなし、非静的要素へのアクセスなし: 静的メソッドは、オブジェクトではなくクラスに属しているため、非静的 (インスタンス) 変数またはメソッドにアクセスできません。言い換えれば、ピザ屋はプレイリストの選択を手伝うことはできません。彼が扱うのはピザだけです。
  • スレッドの安全性: 複数のスレッドが同じ静的変数を変更すると、状況が混乱する可能性があります (同期を処理しない限り)。 2 人のゲストが同じ帽子をめぐって争っているところを想像してみてください。大混乱が起こります。 ?

まとめ: 静電気の概要

Java の静的キーワードは、DJ、ピザ屋、パーティーの VIP ラウンジのようなものです。これにより、すべてがよりスムーズに、より効率的になり、ゲスト全員で共有されます。ユーティリティ メソッド、共有データ、または単にメモリを節約したい場合でも、静的はあなたの味方です。

ただし、すべてを静的な自由に変えないでください。賢く使用すれば、コードはクリーンで効率的で、混乱がなくなります。


それだけです!これで、プロのように静的な知識を吸収する準備が整いました?


以上がJava の「static」の魔法: 1 つは全員のために、そして全員は 1 のために!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート