JavaRush /Java Blog /Random-JA /モディファイアまたは Java 世界でエンチャントをキャストする方法
Petr Gorskin
レベル 22
Москва

モディファイアまたは Java 世界でエンチャントをキャストする方法

Random-JA グループに公開済み
同志諸君、銀河系の良い一日を!これは私の最初の惑星間原稿であり、私はエンジニアなので、いくつかの概念の解釈は地球外言語で行うことができます。
Java の世界で修飾子またはエンチャントをキャストする方法 - 1
はじめ に 私の考えでは、Java はドア (パッケージ) のある無限の回廊のようなものです。これらのドアのそれぞれの後ろには、フリースペースと、オブジェクトを作成するための指示 (クラス) が記載された魔法の巻物の山が保管されているファイルキャビネットがあります。各スクロールには、一連の特性 (変数) と能力 (メソッド)、つまりクラス自体またはクラスに基づいて組み立てられたオブジェクトで実行されるアクション (フィールド) が記述されています。この段階では、自分自身が魔法使いになったと想像して、まったく新しい命令 (クラス) を作成してみます。それでは、 モディファイアまたは Java 世界でエンチャントをキャストする方法 - 2知恵の妙薬を飲み(基本を学び)、指示を書き始めましょう。 アクセス修飾子と非アクセス修飾子 命令とそれに基づいて作成されたオブジェクト、およびその特性と能力が、最初は魔法のように魔法をかけられていると想像してみましょう。それらには特定の修飾子のセットが割り当てられます。可能なエンチャントに関するガイドを作成してみましょう。
  1. クラス、オブジェクト、またはフィールドのアクセシビリティを記述するアクセス修飾子は必須です。アクセス修飾子が存在しない場合、JVM (これは普遍的な魔法の源です) が自動的にデフォルトの識別子をパッケージに割り当てます。

    2 番目の修飾子からは非アクセス修飾子があります。これらは必須ではなく、互いに競合する可能性もあります (ただし、最初のことが先です)。

  2. Static修飾子は、クラス、オブジェクト、またはフィールドが静的であることを示します。しかし、それは何を意味するのでしょうか?基本的にはフィールドで試してみます。

    静的変数はクラス変数と呼ばれ、そのクラスのすべてのインスタンスに固有です。静的メソッドは、それが宣言されているオブジェクトを作成せずに呼び出すことができます。静的クラスは、あるクラスを別のクラスにネストする場合に使用され、内部クラスと外部クラス間の相互作用の原理はメソッドと似ています (これは別の説明のトピックです)。オブジェクト内の個別のブロックとしても使用できます。

  3. Final修飾子は、変数が定数であることを効果的に示します。メソッドの場合 - 継承中にオーバーライドできないことを示しますが、クラスの場合、これはメソッドを継承できない (不変) ことを示します。

    static 修飾子とfinal 修飾子は、クラス、オブジェクト、フィールドに適用されます。ただし、それらの一部 (変数とメソッドは両方ともフィールドですが、すべての修飾子が両方に適用されるわけではないため、その一部) にのみ適用される修飾子もあります。たとえて言えば、ブーツと手袋だけが速度のエンチャント(より速く移動できるようにするため)ができますが、帽子に速度のエンチャントを施すことは無意味です(そして万国監視評議会(コンパイラー)はそれを許可しません)。

  4. Abstract 修飾子はメソッドとクラスにのみ適用されます。抽象メソッドとは、実装(本体)を持たないメソッドです。

    クラスが抽象としてマークされている場合、そのクラスには抽象メソッドが含まれているか、そのクラスのインスタンスの作成を防ぐために行われています。例えると、説明書の真ん中に「オブジェクトの色付け」という見出しがあり、その後は説明がありません。それらの。この命令を使用すると、オブジェクトを作成し、それに色を付けることもできますが、この特定の命令ではその方法については説明されていません (このオブジェクトに基づいて赤いオブジェクトを作成するための独自の命令を作成し、それに色を付ける方法を説明します)。

マルチスレッド環境で作業する場合、特別な修飾子を使用できます。
  1. Syncronized 修飾子はメソッドにのみ使用されます。これが存在するということは、一度に 1 つのスレッドだけがそれを実行できることを示しています。オブジェクト内の別個のコード ブロックとして使用することもできます (同期オブジェクトを指定)。

  2. Volatile修飾子-変数専用。複数のスレッドで同時に使用できる変数に使用することをお勧めします。このような修飾子を持つ変数は、変更されるたびにプロセッサ キャッシュからメイン メモリに即座にコピーされるため、並列スレッドは最新の値を受け取ることができます。

    volatile は、1 つのスレッドのみが変数に書き込み可能で、残りのスレッドは変数からの読み取りのみが可能な場合に適用できることに注意してください。他のケースでは、揮発性変数に書き込むメソッドに synchronized 修飾子を追加することをお勧めします。

  3. Transient修飾子–変数のみ。この修飾子は、オブジェクトをシリアル化するときにスキップする必要がある変数にマークを付けます (これは非常に賢いプロセスなので、原理的には自分で読むことができます...)*

    * - この記事はレベル 17 で書きましたが、それまでプロセスとしてのシリアル化については説明されていなかったので、コピー&ペーストする代わりに、必要に応じて自分で勉強することをお勧めします。

競合する修飾子のペア 修飾子 のさまざまなクラス、オブジェクト、フィールドへの適用に加えて、競合するペアという概念もあります。ヘルメットに強度を付呪すると重くなり、同時に付呪して軽くしたいとします。一方が他方と適合しません。
  1. Final と Volatile - 変数に関して言えば、それが Final (定数) であることと、複数のスレッドが変数を変更する機能を持っていることを同時に言うことはできません。結局のところ、変数は定数であり、いつでもスレッドがそれを読み取ることができます。 、しかし単一のスレッドは定数を変更することはできません(万国監視評議会はそれを許可しません)。
  2. Final と Abstract - クラスとメソッドを抽象 (ほとんどの場合、実装のために明確にする必要があることを意味します) と Final (つまり、クラスとメソッドの両方) にすることはできません。不変。説明書には、任意の素材(抽象的な部分)から優れた耐久性のあるヘルメットを作成する方法が記載されていることがわかりましたが、そのためには穴があってはなりません(最後の必須部分は変更できません)。
  3. 抽象と静的- 抽象メソッドを同時に静的にしたり同期したりすることはできません。静的抽象メソッドは意味がありません。何もしないだけでなく、クラス全体に属しているため、結果は役に立たないものになります。
  4. 抽象的かつ同期化- 何も行わないメソッドで作業を同期することに何の意味があるのでしょうか?
まとめ これで、モディファイアの説明は終わり、すべての競合が解決されました。そして、その結果をチートシート、つまりエンチャントの図に統合することができます。 結論として、 Java の世界で修飾子またはエンチャントをキャストする方法 - 3この記事を書くことは私の願望の実現であると言いたいと思います。修飾語を勉強するために。その経験が成功するかどうかはあなた次第です。私はそれを改善/修正するためのあなたの提案を待っています、そしておそらく一緒に、それを初心者の Java プレイヤーにとって非常に役立つマニュアルにするでしょう。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION