アクセス制御の
最終変数:
Finalは「最後と最後」を意味します。変数が割り当てられると、その変数を再度割り当てることはできません。finalによって変更されたインスタンス変数は、初期値を明示的に指定する必要があります。
final修飾子は通常、クラス定数を作成するためにstatic修飾子と一緒に使用されます。
最終的な方法
親クラスの最後のメソッドはサブクラスで継承できますが、サブクラスでオーバーライドすることはできません。
finalメソッドを宣言する主な目的は、メソッドの内容が変更されないようにすることです。
以下に示すように、メソッドはfinal修飾子を使用して宣言されます。
public class Test{
public final void changeName(){
// 方法体
}
}
最終クラス
最終クラスは継承できず、どのクラスも最終クラスの特性を継承できません。
public final class Test {
// 类体
}
抽象クラス:
抽象クラスを使用してオブジェクトをインスタンス化することはできません。抽象クラスを宣言する唯一の目的は、将来クラスを拡張することです。
クラスは、抽象と最終によって同時に変更することはできません。クラスに抽象メソッドが含まれている場合、そのクラスは抽象クラスとして宣言する必要があります。そうでない場合、コンパイルエラーが発生します。
抽象クラスには、抽象メソッドと非抽象メソッドを含めることができます。
抽象メソッド
抽象メソッドは実装のないメソッドであり、メソッドの具体的な実装はサブクラスによって提供されます。
抽象メソッドをfinalおよびstaticとして宣言することはできません。
抽象クラスを継承するサブクラスは、サブクラスも抽象クラスでない限り、親クラスのすべての抽象メソッドを実装する必要があります。
クラスに複数の抽象メソッドが含まれている場合、そのクラスは抽象クラスとして宣言する必要があります。抽象クラスには、抽象メソッドを含めることはできません。
抽象メソッドの宣言はセミコロンで終わります。例:public abstract sample();。
public abstract class SuperClass{
abstract void m(); //抽象方法
}
class SubClass extends SuperClass{
//实现抽象方法
void m(){
.........
}
}
synchronizedキーワードとsynchronized修飾子で宣言されたメソッドは、一度に1つのスレッドのみがアクセスできます。同期された修飾子は、4つのアクセス修飾子に適用できます。
public synchronized void showDetails(){
.......
}
一時的な修飾子
直列化されたオブジェクトに一時的な変数によって変更されたインスタンス変数が含まれている場合、Java仮想マシン(JVM)は特定の変数をスキップします。
この修飾子は、クラスと変数のデータ型を前処理する変数を定義するステートメントに含まれています。
public transition int limit = 55; //永続的ではありません
public int b; //永続的です
volatile修飾子
volatile-modifiedメンバー変数は、スレッドによってアクセスされるたびに、共有メモリーからメンバー変数の値を再度読み取るように強制されます。さらに、メンバー変数が変更されると、スレッドは変更された値を共有メモリに強制的に書き戻します。このように、いつでも、2つの異なるスレッドは常にメンバー変数の同じ値を参照します。
揮発性オブジェクト参照がnullの可能性があります。
public class MyRunnable implements Runnable
{
private volatile boolean active;
public void run()
{
active = true;
while (active) // 第一行
{
// 代码
}
}
public void stop()
{
active = false; // 第二行
}
}
通常、run()メソッドは1つのスレッド(Runnableで開始されたスレッド)で呼び出され、stop()メソッドは別のスレッドで呼び出されます。1行目のバッファのアクティブな値が使用されている場合、2行目のアクティブな値がfalseであってもループは停止しません。
しかし、上記のコードでは、volatileを使用してアクティブを変更しているため、ループが停止します。