JAVA Static理解
1875 ワード
staticはクラスのメンバー変数メソッドを修飾できます.静的メソッドは、オブジェクトを作成せずにクラス自体のみで呼び出すことができます.用途はグローバルメソッドに似ています.非静的メソッドは、静的メソッドを直接呼び出すことができ、静的メソッドでは非静的メソッドを直接呼び出すことはできないが、静的メソッドにオブジェクト参照を渡すことによって、静的メソッドで非静的メソッドを呼び出すことができる.staticもthisで呼び出すことはできません.static修飾の方法とメンバー変数がすでに存在するクラスオブジェクトから離れている場合は、存在するクラス名でのみ呼び出すことができると理解できます.プロジェクトでは使用率の高いツールメソッドをStaticに設定することがよくあります.例えば、日付の置き換え、文字城のフォーマットなどです.
次のようになります.
/**
* 0:00 , “2007-12-12”
*
* @param date
* @return
*/
public static Date getZeroOfTheDay(Date date) {
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
Calendar newcal = Calendar.getInstance();
newcal.set(Calendar.YEAR, year);
newcal.set(Calendar.MONTH, month);
newcal.set(Calendar.DAY_OF_MONTH, day);
newcal.set(Calendar.HOUR_OF_DAY, 0);
newcal.set(Calendar.MINUTE, 0);
newcal.set(Calendar.SECOND, 0);
newcal.set(Calendar.MILLISECOND, 0);
return newcal.getTime();
}
2.static中国語を静的に訳すと逆は動的で、ここの動静はどのように区別されますか?
jvmではスレッド共有領域とスレッド独占領域に分けられる.静的メソッドは共有領域のメソッド領域(Method Area)に格納され、非静的メソッドはメソッドのオブジェクトとスタック(Heap)に格納される.動静の区別は、メソッド領域とスタック内のコンテンツの作成形式とライフサイクルにあります.メソッド領域の内容は、クラスがJVMにロードされたとき(クラスのオブジェクトが初めて生成されたとき、またはクラスに属する静的データメンバーに初めてアクセスしたとき)に作成され、プログラムがjvmを終了するまで破棄され、クラスがどれだけのオブジェクト静的データを作成しても1つのストレージ領域しか使用されません.スタック内のコンテンツはnew()によって生成されたオブジェクトであり、生成されたオブジェクトが他のオブジェクトに参照されなくなるとjvmによって破棄されます.非静的メソッドは、オブジェクトの作成に伴って生成され、オブジェクトの破棄に伴って消失します.したがって、静的メソッドを使用すると、これらのメソッドはメモリに存在するため、静的メソッドではなくnew()オブジェクトを呼び出す前にオブジェクトを作成する必要があるため、直接使用できます.静的変数と非静的変数は、プログラム実行中に変更され、スレッド共有領域にあります.したがって、マルチスレッド環境ではstatic修飾変数にもスレッドセキュリティの問題があります.