JAvaのキーワードのまとめ
4835 ワード
JAvaには、キーワードがたくさんあります.使ってもいいです.そんなことを知っていて、何を言っているのか、本当に言えません.よく使うキーワードを整理してまとめましょう.
static静的変数
属性、メソッド、内部クラス、コードセグメントは修飾できますが、クラスclassは修飾できません.ローカル変数は修飾できません.static修飾の属性はグローバルに1つしかないことを強調し、初期化はコンパイル期間(クラスがロードされたとき)に、初期化後に変更できる.static修飾の属性、方法、コードセグメントはそのクラスの具体的なオブジェクトに関係なく、オブジェクトを作成しなくてもstatic修飾の属性、メソッドなどを呼び出すことができる.static修飾の方法は、superを使用することができず、修飾の変数はthisを使用できない
メンバー変数と静的変数の違い:メンバー変数はスタックメモリにあり、静的変数はメソッド領域(データ領域または共有領域)の静的領域 に格納される.メンバー変数はオブジェクトによってのみ呼び出されます.thisキーを使用してもよいし、静的変数はオブジェクトによって呼び出されてもよいし、クラスによって呼び出されてもよい. メンバー変数はオブジェクトの作成に伴って作成され、オブジェクトが回収されるにつれて解放され、静的変数はクラスのロードに伴って作成され、クラスが消えるにつれて消失する.
コードブロック
クラスで{}で包まれたコードをコードブロックと呼びます.javaには静的コードブロック、構築コードブロック(通常のコードブロック)、ローカルコードブロックがあります.コードブロックの実行順序(優先度が高いから低い):
これらのコードブロックの定義を例に挙げてそれぞれ説明する
コードブロックの特性:
コードブロックの実行順序は、コードに現れる順序によって決定され、先に実行される.Javaでstaticキーワードで宣言されたコードブロックは、メソッド内に存在せず、静的コードブロックごとに1回しか実行されません.コンストラクションコードブロックは、オブジェクトを作成するたびに呼び出され、コンストラクションコードブロックの実行順序はクラスコンストラクション関数よりも優先されます.関数内のコードブロック、すなわちローカルコードブロックは、関数内のローカル変数のライフサイクルを限定します.
final定数修飾子
finalは修飾することができる:クラス、属性、内部クラス、方法final修飾の属性の初期化はコンパイル期間であってもよいし、実行期間であってもよく、初期化後は変更できない.final修飾のメソッドは,このメソッドがサブクラスで書き換えられないことを示し,final修飾のクラスはクラスが継承されないことを示す.
static final静的定数
順序は要求されず、誰が前にいても後にいても方法、属性、内部クラスを修飾することができる.
通常、この方式を使用して、単例モードを設計して、他の実現方式よりよくて、例えば同期ロック+双空判断、私はこのようにもっと優れて、書き方も簡単だと思います.
abstract抽象クラス修飾子
クラスまたはメソッドを修飾できるクラスはnewキーを使用して作成できません.つまり、直接インスタンス化できません.抽象クラスを使用するには、そのサブクラスを作成して修飾メソッドを使用する必要があります.サブクラスでは書き直さなければなりません.abstractキーワードはstatic、private、finalメソッドに適用できません.これらのメソッドは書き換えられず、サブクラスでは実現できません.finalクラスの方法はabstractではありません.finalクラスにはサブクラスがないからです.abstractクラスのサブクラスがそのスーパークラスのすべてのabstractメソッドを実装していない場合、このサブクラスもabstractクラスであることを明記する必要がある.
形式は次のとおりです.
Transientはシーケンス化修飾子に参加しません
1つのオブジェクトがSerilizableインタフェースを実装すれば、このオブジェクトはシーケンス化できますが、実際の開発ではシーケンス化が必要な属性もあれば、シーケンス化を必要としない属性もあります.この場合、対応する変数にtransientキーワードを付けることができます.
変数がtransientによって修飾されると、変数はオブジェクトの永続化の一部ではなく、シーケンス化後にアクセスできません.Transientキーワードは変数のみを修飾し、メソッドやクラスを修飾することはできません.変数がカスタムクラス変数の場合、クラスはSerializableインタフェースを実装する必要があります.transientキーワードで修飾された変数はシーケンス化されず、静的変数はtransientで修飾されるかどうかにかかわらずシーケンス化されません.
例を見てみましょう.
native外部定義
修飾方法Native Methodはjavaがjavaコードを呼び出すインタフェースです.Native Methodは、Cのような非java言語によって実装されるjavaの方法である.ここではJava Native Interface(Javaローカルインタフェース)、つまりJNIについて説明します.
synchronizedスレッド同期ロック
クラス内のコードがマルチスレッド環境で実行される可能性がある場合は、Javaに言語レベルの同期ロックsynchronizedが内蔵されている同期の問題を考慮します.
synchronized修飾方法とsynchronized修飾コードブロック.コードブロックまたはコードブロックを修飾する場合、同じ時点でセグメントコードを実行するスレッドが最大1つしかないことを保証することができる.一、2つの同時スレッドが同じオブジェクトobjectのsynchronized(this)同期コードブロックにアクセスすると、1時間に1つのスレッドしか実行できない.別のスレッドは、現在のスレッドがこのコードブロックを実行するまで待たなければなりません.二、しかしながら、あるスレッドがobjectのsynchronized(this)同期コードブロックにアクセスする場合、別のスレッドは、object内の非synchronized(this)同期コードブロックにアクセスすることができる.三、特に重要なのは、1つのスレッドがobjectのsynchronized(this)同期コードブロックにアクセスすると、他のスレッドがobject内の他のすべてのsynchronized(this)同期コードブロックへのアクセスがブロックされることである.四、スレッドがobjectのsynchronized(this)同期コードブロックにアクセスすると、このobjectのオブジェクトロックが得られる.その結果、objectオブジェクトのすべての同期コード部分への他のスレッドのアクセスが一時的にブロックされる.
synchronizedを理解して使うのは容易ではありません.
volatile
修飾変数
volatileで修飾された変数は,スレッドが変数を使用するたびに変数修正後の最も高い値を読み出す.volatileは原子的操作のために誤用されやすい.Volatile修飾メンバー変数は、スレッドによってアクセスされるたびに、共有メモリからメンバー変数の値を再読み込みするように強制されます.また、メンバー変数が変化すると、強制スレッドは変化値を共有メモリに戻す.これにより、2つの異なるスレッドは、常にメンバー変数の同じ値を表示します.
JAvaのキーワードは、基本タイプ、権限修飾など、まだまだたくさんあります.すべて最も基礎的な知識点で、一つ一つ説明しません.
static静的変数
属性、メソッド、内部クラス、コードセグメントは修飾できますが、クラスclassは修飾できません.ローカル変数は修飾できません.static修飾の属性はグローバルに1つしかないことを強調し、初期化はコンパイル期間(クラスがロードされたとき)に、初期化後に変更できる.static修飾の属性、方法、コードセグメントはそのクラスの具体的なオブジェクトに関係なく、オブジェクトを作成しなくてもstatic修飾の属性、メソッドなどを呼び出すことができる.static修飾の方法は、superを使用することができず、修飾の変数はthisを使用できない
メンバー変数と静的変数の違い:
コードブロック
クラスで{}で包まれたコードをコードブロックと呼びます.javaには静的コードブロック、構築コードブロック(通常のコードブロック)、ローカルコードブロックがあります.コードブロックの実行順序(優先度が高いから低い):
>Main() > > >
これらのコードブロックの定義を例に挙げてそれぞれ説明する
class Test{
static {
Log.i(""," ");
}
{
Log.i(""," A");
}
{
Log.i(""," B");
}
public T(){
Log.i(""," ");
}
public void test()
{
{
int i=55;
System.out.println(" ");
}
}
}
コードブロックの特性:
コードブロックの実行順序は、コードに現れる順序によって決定され、先に実行される.Javaでstaticキーワードで宣言されたコードブロックは、メソッド内に存在せず、静的コードブロックごとに1回しか実行されません.コンストラクションコードブロックは、オブジェクトを作成するたびに呼び出され、コンストラクションコードブロックの実行順序はクラスコンストラクション関数よりも優先されます.関数内のコードブロック、すなわちローカルコードブロックは、関数内のローカル変数のライフサイクルを限定します.
final定数修飾子
finalは修飾することができる:クラス、属性、内部クラス、方法final修飾の属性の初期化はコンパイル期間であってもよいし、実行期間であってもよく、初期化後は変更できない.final修飾のメソッドは,このメソッドがサブクラスで書き換えられないことを示し,final修飾のクラスはクラスが継承されないことを示す.
static final静的定数
順序は要求されず、誰が前にいても後にいても方法、属性、内部クラスを修飾することができる.
通常、この方式を使用して、単例モードを設計して、他の実現方式よりよくて、例えば同期ロック+双空判断、私はこのようにもっと優れて、書き方も簡単だと思います.
public class T {
/**
*
* @return
*/
public static T getInstance(){
return Hodler.INSTANSE;
}
private static final class Hodler{
private static final T INSTANSE = new T();
}
}
abstract抽象クラス修飾子
クラスまたはメソッドを修飾できるクラスはnewキーを使用して作成できません.つまり、直接インスタンス化できません.抽象クラスを使用するには、そのサブクラスを作成して修飾メソッドを使用する必要があります.サブクラスでは書き直さなければなりません.abstractキーワードはstatic、private、finalメソッドに適用できません.これらのメソッドは書き換えられず、サブクラスでは実現できません.finalクラスの方法はabstractではありません.finalクラスにはサブクラスがないからです.abstractクラスのサブクラスがそのスーパークラスのすべてのabstractメソッドを実装していない場合、このサブクラスもabstractクラスであることを明記する必要がある.
形式は次のとおりです.
/**
*
*/
public abstract class T {
protected abstract void test();
}
/**
*
*/
public class Test extends T{
@Override
protected void test() {
}
}
Transientはシーケンス化修飾子に参加しません
1つのオブジェクトがSerilizableインタフェースを実装すれば、このオブジェクトはシーケンス化できますが、実際の開発ではシーケンス化が必要な属性もあれば、シーケンス化を必要としない属性もあります.この場合、対応する変数にtransientキーワードを付けることができます.
変数がtransientによって修飾されると、変数はオブジェクトの永続化の一部ではなく、シーケンス化後にアクセスできません.Transientキーワードは変数のみを修飾し、メソッドやクラスを修飾することはできません.変数がカスタムクラス変数の場合、クラスはSerializableインタフェースを実装する必要があります.transientキーワードで修飾された変数はシーケンス化されず、静的変数はtransientで修飾されるかどうかにかかわらずシーケンス化されません.
例を見てみましょう.
public class User implements Serializable{
String name;
transient String pwd;
}
public class T {
void test(){
User user = new User("lisan","123456");
//
// , User
Log.i("name:",user.getName());
Log.i("pwd",user.getPwd());
}
}
log :
name:lisan
pwd:null( pwd transient )
native外部定義
修飾方法Native Methodはjavaがjavaコードを呼び出すインタフェースです.Native Methodは、Cのような非java言語によって実装されるjavaの方法である.ここではJava Native Interface(Javaローカルインタフェース)、つまりJNIについて説明します.
synchronizedスレッド同期ロック
クラス内のコードがマルチスレッド環境で実行される可能性がある場合は、Javaに言語レベルの同期ロックsynchronizedが内蔵されている同期の問題を考慮します.
synchronized修飾方法とsynchronized修飾コードブロック.コードブロックまたはコードブロックを修飾する場合、同じ時点でセグメントコードを実行するスレッドが最大1つしかないことを保証することができる.一、2つの同時スレッドが同じオブジェクトobjectのsynchronized(this)同期コードブロックにアクセスすると、1時間に1つのスレッドしか実行できない.別のスレッドは、現在のスレッドがこのコードブロックを実行するまで待たなければなりません.二、しかしながら、あるスレッドがobjectのsynchronized(this)同期コードブロックにアクセスする場合、別のスレッドは、object内の非synchronized(this)同期コードブロックにアクセスすることができる.三、特に重要なのは、1つのスレッドがobjectのsynchronized(this)同期コードブロックにアクセスすると、他のスレッドがobject内の他のすべてのsynchronized(this)同期コードブロックへのアクセスがブロックされることである.四、スレッドがobjectのsynchronized(this)同期コードブロックにアクセスすると、このobjectのオブジェクトロックが得られる.その結果、objectオブジェクトのすべての同期コード部分への他のスレッドのアクセスが一時的にブロックされる.
synchronizedを理解して使うのは容易ではありません.
volatile
修飾変数
volatileで修飾された変数は,スレッドが変数を使用するたびに変数修正後の最も高い値を読み出す.volatileは原子的操作のために誤用されやすい.Volatile修飾メンバー変数は、スレッドによってアクセスされるたびに、共有メモリからメンバー変数の値を再読み込みするように強制されます.また、メンバー変数が変化すると、強制スレッドは変化値を共有メモリに戻す.これにより、2つの異なるスレッドは、常にメンバー変数の同じ値を表示します.
JAvaのキーワードは、基本タイプ、権限修飾など、まだまだたくさんあります.すべて最も基礎的な知識点で、一つ一つ説明しません.