Javaの修飾子公共defaultprivate

Javaの修飾子

:Java言語は、次の2つのカテゴリに分け修飾子の数、提供
•アクセス修飾子
•非アクセス修飾子の
通常最前線文で置かれたクラス、メソッドや変数を定義するために使用される修飾子を。私たちは、次の例により説明しました:

public class className {
 // ... 
 }
  private boolean myFlag; 
  static final double weeks = 9.5;
   protected static final int BOXWIDTH = 42; 
   public static void main(String[] arguments) { 
   // 方法体
    }
____

アクセス制御修飾
Javaで、アクセス制御文字はクラス、フィールド、メソッドとコンストラクタへのアクセスを保護するために使用することができます。Javaのは、4つの異なるアクセス権をサポートしています。

デフォルト(デフォルト、書き込みには何もあり):可視同じパッケージでは、任意の修飾子を使用しないでください。オブジェクトを使用する:クラス、インタフェース、変数、メソッド。

プライベート:同じクラス内に見えます。使用すると、オブジェクト:変数とメソッドを。注:あなたは、クラス(外部クラス)を変更することはできません
すべてのクラスに見える:パブリックを。使用目的:クラス、インタフェース、変数、メソッドは
保護:同じパッケージ内のすべてのクラスおよびサブクラスに見えます。使用すると、オブジェクト:変数とメソッドを。注:あなたは、クラス(外クラス)を変更することはできません。

私たちは、次の表のアクセスによって示すことができる:
アクセス制御
現在のクラス内の修飾子と同じパッケージの子孫クラス(同じパッケージ)に子孫クラス(異なるパッケージ)は、他のパッケージ
の公共YYYYY
YYYY / N保護を(説明)
N
YYYNNデフォルト
プライベートYNNNNの
デフォルトのアクセス権を修飾子-キーワードを使用していない
、同じパッケージ内のクラスの変数やメソッドのデフォルトのアクセス修飾子宣言を使用することが表示されます。変数は暗黙のうち最終のpublic staticとして宣言されているインタフェース、およびデフォルトのアクセス方式のインターフェイスはデフォルトでpublicです。
次の文に示す例では、変数とメソッドは、任意の修飾語なしで使用することができます。

ストリングバージョンは=「1.5.1」;ブール processOrder(){trueを返す;}
プライベートアクセス修飾子-private
プライベートアクセス修飾子がアクセスの最も厳しいレベルであり、それはプライベートメソッド、変数とコンストラクタとして宣言されているのみアクセスは、そのクラスで、クラスとインタフェースは、プライベート宣言することはできません。
型クラスの変数への専用アクセスとして宣言のみクラス外部パブリックゲッターメソッドによってアクセスすることができます。
プライベートアクセス修飾子は、データ保護とクラスの背後にあるクラスの実装の詳細のために主に使用されています。
以下のクラスは、プライベートアクセス修飾子使用
パブリッククラスストリング専用フォーマット{; getFormatのパブリック文字列(){戻りthis.format;}公共ボイドのsetFormat(フォーマットストリング)= {フォーマットthis.format}ロガー}
例えば、ロガークラス変数のフォーマットプライベート変数、および他のタイプは、直接変数の値を設定することはできません。他のクラスは、可変可能に動作させるために、我々は2つのパブリックメソッドを定義:getFormatの()(戻り値の形式)とのsetFormat(文字列)(フォーマットの設定値)
-publicパブリックアクセス修飾子
publicクラス、メソッドを宣言しているが、 、方法およびインターフェースは、アクセスの任意の他のタイプで構成することができます。
異なるパッケージにはいくつかの相互にアクセス可能なpublicクラスの場合は、対応するパケットのパブリッククラスをインポートする必要があります。そのため、継承クラスで、すべてのパブリックメソッドと変数のようにそのサブクラスによって継承することができます。
パブリックアクセスコントロールを使用して、次の機能:
公共の静的な無効メイン(String []型の引数){...} //
ジャワのメインプログラム()メソッドは、公衆に提供されなければならないが、そうでない場合は、Javaインタプリタは、クラスが実行されません。
保護されたアクセス修飾子は保護さ
以下の2点に注意事項を分析する必要性を保護:

サブクラス同じパッケージのベースクラス:保護されたとして、変数が宣言され、メソッドとコンストラクタは、同じパッケージに他のクラスにアクセスすることができます。
。•
。•
サブクラスの基本クラスは、同じパッケージではありません。だから、サブクラスで、サブクラスのインスタンスは、基本クラスの派生から継承されたそれらの保護されたメソッドにアクセスすることができ、及び保護基本クラスのインスタンスメソッドにアクセスすることができません。

メンバーを変更することができるデータ、コンストラクタ、メソッドを保護し、クラスのメンバーは、(内部クラスを除く)を変更することはできません。
インターフェイスとインターフェイスメンバー変数とメンバー・メソッドは、保護宣言することはできません。私たちは、プレゼンテーションを見ることができます。

サブクラスは、メソッドと変数にアクセスすることができますので、我々はクラスを保護することができることを、これらのメソッドと変数の使用に関連していない、修飾保護宣言しました。
以下の保護親アクセス修飾子を使用、子クラスは親クラスのopenSpeaker()メソッドをオーバーライドします。
クラスAudioPlayer {openSpeakerブール保護(スピーカ SP){// 実装の詳細}}クラスStreamingAudioPlayerはAudioPlayer {保護延びブールopenSpeaker(スピーカSP){// 実装の詳細を}}
openSpeaker()メソッドは、次にAudioPlayerに加えて、プライベートとして宣言された場合外部クラスは、メソッドにアクセスすることができません。
すべてのクラスはメソッドにアクセスできるようにopenSpeakerは()、publicとして宣言した場合。
私たちは、保護としてクラスは、メソッドが宣言され、サブクラスのメソッドにそれが見えるようにしたい場合。
Javaは、修飾子を理解することが最も困難に保護されたクラスのメンバへのアクセスで、より詳細、詳細Javaは、キーワードの保護を参照してください。
アクセス制御と継承は
、以下の方法継承されたルールに注意してください:

親クラスは、公開でなければならないサブクラスでpublicとして宣言しました。
。•
。•
親クラスのメソッドは、保護されたとして宣言またはサブクラスで保護されたとして宣言、またはpublicとして宣言、プライベート宣言することはできません。
。•
。•
親クラスのメソッドをprivate宣言され、継承することはできません。


非アクセス修飾子

他の多くの機能を達成するために、Javaは、非アクセス修飾子の数を提供します。
クラス変数とクラスメソッドの修正のためにstatic修飾子。
クラス変数およびメソッドを変更するための最終的な変性剤、変性最終クラスが継承することができない、クラスの修飾方法を継承することができないが、修飾された変数の定数を再定義し、修正することができません。
abstract修飾子は、抽象クラスと抽象メソッドを作成するために使用されます。
主にスレッドをプログラムするため、同期やvolatile修飾子。
static修飾子

静的変数:


静的なキーワードは関係なく、クラスがインスタンス化されるオブジェクトの数、オブジェクトの独立した静的変数を宣言しないために使用され、それは、静的変数のコピーが1つしかあります。静的変数はクラス変数として知られています。ローカル変数は静的変数として宣言することはできません。
。•
。•

静的メソッド:


静的なキーワードが使用されている静的メソッドは、オブジェクトの宣言とは無関係です。静的メソッドは、非静的変数のクラスを使用することはできません。パラメータリストからデータを取得するための静的メソッドは、データが算出されます。

クラス変数とメソッドへのアクセスは、classname.variablenameとclassname.methodname方法を使用して直接アクセスすることができます。
次の例では、静的メソッドとクラス変数を作成するための修飾クラス。

public class InstanceCounter {
 private static int numInstances = 0; 
 protected static int getCount() {
  return numInstances;
   }
    private static void addInstance() { 
    numInstances++;
     } InstanceCounter() {
      InstanceCounter.addInstance();
      } 
      public static void main(String[] arguments) { System.out.println("Starting with " + InstanceCounter.getCount() + " instances");
      for (int i = 0; i < 500; ++i){ new InstanceCounter(); 
      } 
      System.out.println("Created " + InstanceCounter.getCount() + " instances");
       } 
       }

:上記の例は、編集結果は以下のようにしている実行する
500のインスタンスにinstancesCreated 0から始めて
、最終的な修飾子
final変数を:

最後の再割り当てすることはできません、変数の割り当てと、「最後の、最後の」意味を表します。変更され、最終的なインスタンス変数を明示的に初期値を指定する必要があります。
final修飾子とstatic修飾は、通常、クラス定数を作成するために一緒に使用されています。

パブリッククラスのテスト{最終int値= 10; // 次の定数宣言のpublic static final int型BOXWIDTH = 6の例であり、静的最終的な文字列TITLE = "マネージャー";公共ボイドchangeValue(){値= 12; // 出力エラー}}
最終メソッド
最終メソッドクラスは、サブクラスによって継承されてもよいが、サブクラスで変更することはできません。
この方法の主な目的は、この方法の最終的な宣言は変更されないようにするためです。
方法を使用して、以下に示すように、最終的な修飾子を宣言しました。
パブリッククラスのテスト{公共の最終的なボイドchangeName (){// メソッド本体}}
finalクラス
の任意のクラスは、最終的なカテゴリのプロパティを継承することができずに、最終的なクラスは、継承することができません。

パブリック最終クラスTest {//クラスの本体}
abstract修飾子
抽象クラス:
抽象クラスをインスタンス化したオブジェクトに使用することはできない、抽象クラスの声明の唯一の目的は、将来の拡張のためのクラスです。
クラスは、抽象的で、最終的な変更することはできません。クラスは抽象メソッドが含まれている場合は、クラスがそれ以外の場合は、コンパイルエラーが発生します、抽象クラスとして宣言する必要があります。
抽象クラスは非抽象メソッドと抽象メソッドが含まれていてもよいです。
例としては
抽象クラスキャラバン{プライベートダブル価格;プライベート文字列モデル;プライベート文字列の年、公共の抽象無効goFast(); // 抽象メソッドパブリック抽象無効changeColor();}
の抽象メソッド
抽象メソッドは、無実装方法であり、サブクラスによって提供される方法の特定の実装。
抽象メソッドは、finalまたはstaticとして宣言することはできません。
サブクラスでも抽象クラスでない限り、親クラスのすべての抽象クラスの抽象メソッドの任意のサブクラスの継承は、実装する必要があります。
クラスは抽象メソッドの数が含まれている場合、クラスは抽象クラスとして宣言する必要があります。抽象クラスは、抽象メソッドを含めることはできません。
例えば、セミコロンで抽象メソッドの終了を宣言する:パブリック抽象サンプルを()。

public abstract class SuperClass{
 abstract void m();
  //抽象方法 
  } 
  class SubClass extends SuperClass{
   //实现抽象方法 
   void m(){
    .........
     } 
    }

同期修飾子
同じ時間を宣言するキーワード同期方法は一つだけのスレッドにアクセスすることができます。同期修飾子は、4つのアクセス修飾子を適用することができます。
例として
公共ボイドshowDetails同期(){...}
過渡修飾子
シリアライズされたオブジェクトは、インスタンス変数を含むその特定の変数をスキップする過渡変形、Java仮想マシン(JVM)です。
修飾子は、ステートメントに含まれている前処理変数のデータ・タイプの変数、およびクラスを定義します。

= 55公衆過渡INT制限; //ない永続的な公共のint B; //永続的な
揮発性修飾子
揮発性修飾メンバ変数スレッドが共有メモリから再リードメンバ変数に強制されてアクセスされるたびに値。また、変数の変化のメンバーは、スレッドは、共有メモリに書き戻された値を変更することを余儀なくされたとき。だから、任意の時点で、2つの異なるスレッドが常にメンバ変数の同じ値を参照してくださいということ。
揮発性オブジェクト参照をnullにすることもできます。

public class MyRunnable implements Runnable {
 private volatile boolean active;
  public void run() { 
  active = true; while (active) 
  // 第一行 { // 代码
   }
    }
     public void stop() { 
     active = false;
      // 第二行 
      } 
      }

通常の状況下では、スレッドが別のスレッドの呼び出し停止中()メソッド、(オープン実行可能スレッドで)run()メソッドを呼び出します。アクティブバッファにおける最初の行の値が使用される場合、ループがアクティブが偽である第二の行で停止しません。
しかし、上記のコードは、私たちは、活性揮発性の変更を使用するので、サイクルが停止します。

发布了51 篇原创文章 · 获赞 5 · 访问量 3050

おすすめ

転載: blog.csdn.net/qq_43674360/article/details/104075096