まず、範囲へのアクセス:
公共>保護>デフォルト(つまり、パケットアクセス)>プライベート変数[デフォルト]は変更できません
プライベート | デフォルト | 保護されました | パブリック | |
同じクラス | 1 | 1 | 1 | 1 |
同じパッケージ内のクラス | 0 | 1 | 1 | 1 |
サブクラス | 0 | 0 | 1 | 1 |
パッケージ内の他のクラス | 0 | 0 | 0 | 1 |
1、アクセス制御文字:
1)公共:トータルアクセス。彼らはすべてのクラスに表示されます。
2)保護:保護タイプへのアクセスを。同じパッケージに見える、目に見える別のサブクラスをパッケージ化。
3)デフォルト:デフォルトのアクセス。目に見えるだけで同じパッケージに、パッケージの異なるサブクラスに注意を払うには表示されません。
4)プライベート:プライベートアクセス。クラスのみ表示するために、残りがなくなっています。2、で非アクセス制御 1)クラス変数とクラスメソッドを作成するためのstatic修飾子。 2)クラス、メソッド、および変数を変更するため、最終的な修飾クラスが継承することができない、最終的な改質剤、クラスの修飾方法を継承することができない、修飾された変数の定数を再定義は、変更することができません。 3)抽象修飾子、および抽象クラスを作成するための抽象メソッド。 4)同期は、マルチスレッドのための同期。 5)揮発性修飾メンバ変数、それがアクセスされるたびに、スレッドは、共有メモリからメンバ変数の再読み取り値に強制されます。また、変数の変化のメンバーは、スレッドは、共有メモリに書き戻された値を変更することを余儀なくされたとき。だから、任意の時点で、2つの異なるスレッドが常にメンバ変数の同じ値を参照してくださいということ。
6)過渡:過渡修飾シリアライズされたオブジェクトが含まれているインスタンス変数は、JVMは、その特定の変数をスキップします。
3、フィールド修飾子
新しい、プライベート、保護、公共、を含む内部、静的および読み取り専用のいくつか。仮パラメータの場合、それだけで、最終的に修正することができ、および任意の他の修飾は、コンパイルエラーが発生します。しかし、この修飾子では一定の制限があり、彼らはメソッドのパラメータに何らかの変更を加えることができないことを、通常の状況下では、これを使用していない、クラス内の唯一の方法は、メソッドの最後の正式なパラメータで変更されます。
一部は揮発性で発言します:
揮発性の役割:
1)命令の再配置を禁止する:変数の型はvolatileとして宣言された場合、コンパイラランタイムがこの変数が共有されているがわかりますので、変数にできなくなり、他のスレッドに更新通知変数を確実にするために並べ替えは、他のメモリ操作で動作します。それは揮発性の変数にアクセスするとき、ロック操作を実行していないと、そのため、実行スレッドがブロックされていることはありません。しかし、その揮発性変数はsynchronizedキーワードよりも軽量な同期メカニズムです。
可変のスレッド修正値であり、この変数操作、異なるスレッドが、新しい値が他のスレッドに直ちに表示されている場合2)の視認性を確保します。
3))アトミック(スレッドセーフを保証するものではありません。
volatileキーワードを比較し、同期します:
揮発性のパフォーマンスは確かに良くsynchronizedキーワードよりもあるように、1)揮発性のキーワードは、スレッド同期の軽量な実装です。しかし、揮発性のキーワードは、変数のみに使用することができ、メソッドsynchronizedキーワードやコードブロックを変更することができます。効率が大幅に得ることが低減するために、主に実施同期キーワードの後に改善され、性能をもたらすリリースロックはオーバーヘッドJavaSE1.6、実際の現像後バイアスロックおよび軽量ロックおよび他の様々な最適化により導入しますキーワード同期シーン以上を使用します。
2)マルチスレッドアクセス揮発性キーワードブロッキング(視認性)が発生せず、発生したキーワード同期ブロックすることができます。
3)揮発性秩序、視認性を確保するため、これら3つのプロパティこと)を保証するために、アトミック(同期を保証することはできません。
4)揮発性キーワードは、主に、複数のスレッド間で変数の可視性を解決するために使用され、そして同期キーワードは、アクセスの同期に複数のスレッド間でリソースを解決しています。