ホームページ Java &#&チュートリアル Java の「static」の魔法: 1 つは全員のために、そして全員は 1 のために!

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

Sep 10, 2024 pm 06:30 PM

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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

See all articles