静的および最終的には、我々は、キーワードを習得しなければならない2つです。他のキーワードとは異なり、彼らは様々な用途を持っているだけでなく、特定の状況下で使用され、プログラムの構造を最適化するためのプログラムの動作性能を向上させることができます。我々はについて話す前の章で、最終的なキーワードの原理と使用、このセクションでは、我々は原則を見て、どのようにstaticキーワードを使用します。
A.静特性
辞書ベースのデータは、Dateutilsなどのツールの静的、方法を変更するために使用されるようにstatic修飾子は、典型的には、開発プロセスで使用される変数とメソッドを変更するために使用され、のStringUtils方法、そのようなツールは、静的に変更するために使用されます他のシナリオがあるかどうか、2つの最も頻繁に使用されるシーンに加えて、答えは:はい、5つのカテゴリーの合計:
- 静的変数
- 静的メソッド
- 静的ブロック
- 静的な内部クラス
- 静的パッケージ
修飾された静的変数、メソッド、コードブロック、初期化中に内部クラスのクラスローディングが完了したが、スタティックメモリJavaヒープに(JDK7.0前工程の記憶領域)に格納されているので、優れた静的オブジェクトが存在します。
また、静的変数または静的な方法として知られている修飾された静的メンバ(変数、メソッド)すべてのオブジェクトによって共有されているが、直接カテゴリによって呼び出すことができる(また、クラスを呼び出すことにより、推奨)。
二つ。静的変数
静的変数の負荷のクラスが存在すると、クラスの消失、クラスがロードされたとき、それはJavaヒープに割り当てられたメモリ空間内の静的変数となり、あなたが入力でき、[変数名]と[オブジェクトと消える。変数名前]道の呼び出し、直接クラス[変数名]の方法を使用することをお勧めします
public class Person {
private String name;
private static int eyeNum;
public static int legNum = 2;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static int getEyeNum() {
return eyeNum;
}
public static void setEyeNum(int eyeNum) {
Person.eyeNum = eyeNum;
}
}
public static void main(String[] args) {
Person person = new Person();
person.setEyeNum(25);
Person person1 = new Person();
person1.setEyeNum(28);
System.out.println(person.getEyeNum());//28
System.out.println(person1.getEyeNum());//28
int legNum = person.legNum;
System.out.println(legNum);//2
}
上記の例から分かるように、すべての共有オブジェクトの静的変数であるオブジェクトは、その値を変更し、それを直接別のオブジェクトの異なる値をもたらすであろう。
静的変数を使用する場合は?
通常、私たちの共通のデータ・ディクショナリクラスとして、最終的なキーワードと組み合わせて使用される共有変数の使用など。
private static final String GENERAL_MAN = "man";
還元例外ログを収集するためのクラス・ロガー方法の開始を定義し、そのような部分のように、オブジェクトを作成します
private static Logger LOGGER = LogFactory.getLoggger(MyClass.class);
常に、このような私たちのシングルトンとして、同じ変数に戻ります。
三。staticメソッド
静的メソッドは、静的メンバを(静的変数、静的メソッド)よりもむしろ静的メソッドは静的メソッドにアクセスすることができ、非静的メソッドにアクセスすることができるアクセスすることができ、オブジェクトより静的メンバーが存在するため、キーワードと関連オブジェクトを呼び出すことができません、このような、できないスーパーは、キーワードでターゲット・リソースにアクセスします。
public class Person {
private String name;
private static int eyeNum;
public static int legNum = 2;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static int getEyeNum() {
System.out.println(name);//编译出错,name不可用
return eyeNum;
}
public static void setEyeNum(int eyeNum) {
Person.eyeNum = eyeNum;
this.name = "";//编译出错,this不可用
}
}
静的メソッドを使用する場合は?
静的メソッドは、一般的に、現在のオブジェクトと共に使用されるファクトリメソッド、ツール、方法とすることができません。Math.sqrt()、は、Arrays.sort()、StringUtils.isEmpty()などが挙げられます。
四。静的ブロック
使用のための静的変数と静的メソッドに静的コードブロックに対してはそれほど普及していない場合、彼らはより多くの一般的な使用法、最初の実行、及び一度だけ実行されたときにクラスをロードするコードの静的ブロックであろう。
public static Map<String, String> timeTypes;
static {
timeTypes = new HashMap<>();
timeTypes.put("year", "年");
timeTypes.put("quarter", "季");
timeTypes.put("month", "月");
timeTypes.put("day", "日");
System.out.println("初始化1");
}
public static void main(String[] args) {
System.out.println("初始化2");
}
結果は以下のとおりです。
初始化1;
初始化2;
コードの静的ブロックを使用する場合は?
このようなコンフィギュレーションファイルの情報を読み取るように、初期化動作を行う場合、通常、サーバは、現在のパラメータを取得します
ファイブ。静的な内部クラス
それは静的な内部クラスになった、静的で、内部クラスを定義し、静的な内部クラスはトップレベルのクラス、静的な内部クラスのビジネスアプリケーションの開発にはあまり使用を変更することはできません、変更することができます。
public class StaticCouter {
private String str0 = "hi"; //非静态变量
private static String str1 = "hello"; //静态变量
static class StaticInnerClass{//静态内部类
public void getMessage(){
System.out.println(str0);//编译出错
System.out.println(str1);
}
}
class NormalInnerClass{//非静态内部类
public void getMessage(){
System.out.println(str0);
System.out.println(str1);
}
}
}
非静的内部クラスとの類似点と相違点静的内部クラスとは何ですか?
静的な内部クラス | 非静的な内部クラス |
---|---|
あなたはクラスの外の基準点を持っている必要はありません | 外部のキーワードで新しいクラスを参照する必要があります |
一般的な変数を定義および方法はまた、静的変数やメソッドを定義することができます | 一般的な変数とメソッドを定義し、あなたは静的変数やメソッドを定義することはできません |
あなたは、外部の静的クラスメンバーは外部クラスの普通のメンバーを呼び出すことはできません呼び出すことができます | これは、外側のクラスの普通のメンバーと静的メンバ呼び出すことができます |
public static void main(String[] args) {
//创建静态内部类实例
StaticInnerClass staticInnerClass = new StaticInnerClass();
//调用静态内部类方法
staticInnerClass.getMessage();
//创建静态内部类实例
StaticCouter.StaticInnerClass staticInnerClass1 = new staticCouter.StaticInnerClass();
//调用静态内部类方法
staticInnerClass1.getMessage();
//创建普通内部类实例
StaticCouter.NormalInnerClass normalInnerClass = new StaticCouter().new NormalInnerClass();
//调用普通内部类方法
normalInnerClass.getMessage();
}
VI。静的にパッケージ
この概念は、たとえば、理解されていません
public static void main(String[] args) {
int[] arra = {1,4,5,7};
Arrays.sort(arra);
Arrays.asList(arra);
Arrays.fill(arra, 6);
}
静的パッケージは、配列を呼び出すために、重複オブジェクトのクラス名を削除するために導入されます
トップを導入することにより、
import static java.util.Arrays.*
(ARRA)を呼び出すときに現在のクラスの導入は、直接ソートを呼び出すように、あなたは、すべての配列クラスの静的変数、メソッド、内部クラスを置くことができ、asList(ARRA)、
一般的に使用されていないjava5後に導入され、慎重に、良い読みやすクラスのメソッドを呼び出すために、比較的単純なものではなくなります。
VII。まとめ
Javaの静的は非常に一般的にキーワードに使用され、多くの利用シナリオがあり、紙には、静的メソッド、静的コード・ブロック、静的な内部クラス、導入静的パッケージ、不完全な場合、その5、静的変数の使用が記載されています批判を喜ばと一緒に進歩を遂げることを望む、ありがとうございました!