Java言語は、主に次の2つのカテゴリに分かれている多くの修飾子を提供します。
修飾子は、クラス、方法、または変数を定義するために使用され、通常、ステートメントの最前線に配置されます。次の例を使用して説明しましょう。
Public Class Class ClassName {// ...} Private Boolean MyFlag; Static Final Double Weeks = 9.5; Protected Static Final Int BoxWidth = 42; public static void Main(String [] arguments){// Method Body}アクセス制御修飾子
Javaでは、アクセスコントロールを使用して、クラス、変数、メソッド、およびコンストラクターへのアクセスを保護できます。 Javaは、4つの異なるアクセス許可をサポートしています。
デフォルトとも呼ばれるデフォルトは、修飾子を使用せずに同じパッケージ内に表示されます。
プライベート、プライベート修飾子で指定された、同じクラス内で見える。
一般的な修飾子によって指定された一般的なクラスに見える一般的なモディファイアによって指定されています。
保護された、保護された修飾子で指定され、同じパッケージ内のクラスとすべてのサブクラスに表示されます。
デフォルトアクセスモディファイ - キーワードは使用されません
デフォルトで宣言された変数と方法アクセス修飾子は、同じパッケージ内のクラスに表示されます。インターフェイス内のすべての変数は、パブリックスタティックファイナルとして暗黙的に宣言されますが、インターフェイス内のメソッドはデフォルトで公開されます。
例:
次の例に示すように、変数とメソッドの宣言には修飾子がない場合があります。
stringバージョン= "1.5.1"; boolean processorder(){return true;}プライベートアクセス修飾子 - プライベート
プライベートアクセス修飾子は最も厳格なアクセスレベルであるため、プライベートとして宣言された方法、変数、およびコンストラクターは、属するクラスによってのみアクセスでき、クラスとインターフェイスはプライベートとして宣言することはできません。
プライベートアクセスタイプとして宣言された変数は、クラス内のパブリックゲッターメソッドを介して外部クラスによってのみアクセスできます。
プライベートアクセス修飾子の使用は、主にクラスの実装の詳細を非表示にし、クラスのデータを保護するために使用されます。
次のクラスでは、プライベートアクセス修飾子を使用しています。
パブリッククラスロガー{プライベート文字列形式; public string getFormat(){return this.format; } public void setformat(string format){this.format = format; }}この例では、Loggerクラスの形式変数はプライベート変数であるため、他のクラスは変数の値を直接取得して設定することはできません。他のクラスが変数を操作できるようにするために、2つのパブリックメソッドが定義されています:getFormat()(フォーマットの値を返す)およびsetFormat(string)(形式の値を設定)
パブリックアクセス修飾子 - パブリック
一般に宣言されたクラス、方法、コンストラクター、およびインターフェイスは、他のクラスでアクセスできます。
互いにアクセスしているいくつかの公開クラスが異なるパッケージに配布されている場合、対応するパブリッククラスが配置されている場所にパッケージをインポートする必要があります。クラスの継承により、クラスのすべてのパブリック方法と変数は、そのサブクラスによって継承できます。
次の機能は、パブリックアクセス制御を使用しています。
public static void main(string [] arguments){// ...}Javaプログラムのメイン()メソッドを公開する必要があります。そうしないと、Javaインタープリターはクラスを実行できません。
保護されたアクセス修飾子 - 保護されています
保護されていると宣言された変数、メソッド、およびコンストラクターは、同じパッケージの他のクラス、または異なるパッケージのサブクラスによってアクセスできます。
保護されたアクセス修飾子は、クラスやインターフェイスを変更できません。方法とメンバー変数は保護されていると宣言できますが、メンバー変数とインターフェイスのメンバー方法は、保護されていると宣言することはできません。
サブクラスは、保護された修飾子によって宣言された方法と変数にアクセスでき、これらのメソッドと変数の使用から無関係なクラスを保護できます。
次の親クラスでは、保護されたアクセス修飾子を使用し、サブクラスは親クラスのopenSpeaker()メソッドを過負荷にします。
class audioplayer {Protected boolean openspeaker(Speaker sp){//実装の詳細}} class streamingaudioplayer {boolean openspeaker(speaker sp){//実装の詳細}}}}OpenSpeaker()メソッドがプライベートとして宣言されている場合、Audioplayer以外のクラスはメソッドにアクセスできません。 OpenSpeaker()が公開されている場合、すべてのクラスがメソッドにアクセスできます。メソッドをクラスのサブクラスにのみ表示したい場合は、そのメソッドを保護されていると宣言します。
アクセス制御と継承
次の継承ルールに注意してください。
非アクセス修飾子
他のいくつかの機能を実装するために、Javaは多くの非アクセス修飾子も提供します。
静的修飾子は、クラスのメソッドとクラス変数を作成するために使用されます。
最終的な修飾子は、クラス、メソッド、変数を変更するために使用されます。ファイナルによって変更されたクラスを継承することはできません。変更された方法は、継承されたクラスによって再定義できず、変数変更された変数は定数であり、変更できません。
抽象クラスと抽象的なメソッドを作成するために使用される抽象修飾子。
同期された揮発性修飾子は、主にスレッドプログラミングに使用されます。
静的修飾子
静的キーワードは、オブジェクトに依存しない静的変数を宣言するために使用されます。クラスのオブジェクトの数がインスタンス化されていても、静的変数のコピーは1つしかありません。静的変数はクラス変数とも呼ばれます。ローカル変数は、静的変数として宣言できます。
静的キーワードは、オブジェクトに依存しない静的メソッドを宣言するために使用されます。静的方法は、クラスの非静的変数を使用できません。静的メソッドは、パラメーターリストからデータを取得し、データを計算します。
クラス変数とメソッドへのアクセスは、classname.variablenameおよびclassname.methodnameを使用して直接アクセスできます。
次の例に示すように、静的修飾子を使用して、クラスのメソッドとクラス変数を作成します。
Public Class Instancecounter {private static int numinstances = 0;保護されたstatic int getCount(){return numinstances; } private static void addinstance(){numinstances ++; } instancecounter(){instancecounter.addinstance(); } public static void main(string [] arguments){system.out.println( " + instancecounter.getCount() +" instances "); for(int i = 0; i <500; ++ i){new Instancecounter(); } system.out.println( "created" + instancecounter.getCount() + "instances"); }}上記の例は、次のように実行および編集されています。
0インスタンスから始めました
500インスタンスを作成しました
最終的な修飾子
最終変数:
最終変数は明示的に初期化され、1回しか初めてではありません。決勝として宣言されたオブジェクトへの参照は、異なるオブジェクトを指すことはできません。ただし、最終オブジェクトのデータを変更できます。言い換えれば、最終オブジェクトへの参照は変更することはできませんが、内部の値を変更できます。
最終的な修飾子は通常、静的修飾子と一緒に使用され、クラス定数を作成します。
例:
パブリッククラステスト{final int value = 10; //以下は、一定のpublic static final int boxwidth = 6を宣言する例です。静的な最終文字列タイトル= "Manager"; public void changevalue(){value = 12; //エラーは出力されます}}最終的な方法
クラスの最終的な方法は、サブクラスで継承できますが、サブクラスで変更することはできません。
最終的な方法を宣言する主な目的は、メソッドの内容が変更されないようにすることです。
以下に示すように、最終的な修飾子を使用してメソッドを宣言します。
パブリッククラステスト{public final void changename(){// method body}}最終クラス
最終クラスを継承することはできず、最終クラスの機能を継承するクラスはありません。
例:
パブリックファイナルクラステスト{//クラスボディ}抽象修飾子
抽象クラス:
抽象クラスを使用してオブジェクトをインスタンス化することはできません。抽象クラスを宣言する唯一の目的は、将来クラスを拡大することです。
クラスは、抽象と最終によって同時に変更することはできません。クラスに抽象的なメソッドが含まれている場合、クラスは抽象クラスとして宣言する必要があります。そうしないと、コンパイルエラーが発生します。
抽象クラスには、抽象的なメソッドと非アブストラクトメソッドを含めることができます。
例:
抽象クラスCaravan {プライベートダブル価格。プライベート文字列モデル。プライベートストリング年;パブリックアブストラクトvoid gofast(); //抽象メソッドpublic abstract void changecolor();}抽象的なメソッド
抽象的なメソッドは、実装のない方法であり、メソッドの特定の実装はサブクラスによって提供されます。抽象的なメソッドは、最終的かつ厳格として宣言することはできません。
抽象クラスを継承するサブクラスは、サブクラスも抽象クラスでない限り、親クラスのすべての抽象的なメソッドを実装する必要があります。
クラスにいくつかの抽象的なメソッドが含まれている場合、クラスは抽象クラスとして宣言する必要があります。抽象クラスには抽象的なメソッドが含まれていない場合があります。
抽象的なメソッドの宣言は、セミコロンで終わります。たとえば、パブリックアブストラクトサンプル()。
例:
パブリックアブストラクトクラスのスーパークラス{要約void m(); //要約方法}クラスのサブクラスはスーパークラスを拡張{//要約メソッドvoid m(){........}}を実装します同期修飾子
同期されたキーワードによって宣言された方法は、同時に1つのスレッドでのみアクセスできます。同期修飾子は、4つのアクセス修飾子に適用できます。
例:
public synchronized void showdetails(){......}一時的な修飾子
シリアル化されたオブジェクトに一時的な修飾インスタンス変数が含まれる場合、Java仮想マシン(JVM)はその特定の変数をスキップします。
この修飾子は、変数を定義するステートメントに含まれており、クラスと変数のデータ型を前処理するために使用されます。
例:
公共の一時的なint limit = 55; // stapingpublic int bはありません。 //持続します
揮発性修飾子
揮発性修正されたメンバー変数は、スレッドでアクセスするたびに、共有メモリからメンバー変数の値を再確認することを余儀なくされます。さらに、メンバー変数が変更されると、スレッドは変更値を共有メモリに戻すことを余儀なくされます。このように、いつでも、2つの異なるスレッドは常に特定のメンバー変数と同じ値を表示します。揮発性オブジェクト参照はヌルになる場合があります。
例:
パブリッククラスmyrunnableは実行可能{private volatile boolean Active; public void run(){active = true; while(active)// line 1 {// code}} public void stop(){active = false; //行2}}一般に、run()メソッドは1つのスレッドで呼び出され、stop()メソッドは別のスレッドで呼び出されます。バッファーの1行目のアクティブの値が使用されている場合、行2のアクティブがfalseに設定されている場合、ループは停止しません。
上記はこの記事のすべての内容です。この記事の内容が、すべての人の勉強や仕事に役立つことを願っています。また、wulin.comをもっとサポートしたいと思っています!