关于Java静态的内容
一开始
这次我想简要记录一下关于Java的静态变量。以下是我的博客。
特征
-
- staticがついている変数やメソッドは全てのインスタンスが共有する。
-
- プログラム起動時に1回のみ、メモリに割り付けられる。
-
- クラス名前で直接に参照ができる。
Person.nameのようにインスタンス化をしなくても利用可能になる。
静的ファクトリメソッドパターンやシングルトンパターンの構築に使われる。
Java8の以前にはPermang generation area領域に保存されたが、Java8以降にはMetaspaceに保存し、できるだけGCされるように最適化している。
静态变量
class NakamuraFamily {
String lastname = "中村";
}
public class Sample {
public static void main(String[] args) {
NakamuraFamily nakamura1 = new NakamuraFamily();
NakamuraFamily nakamura2 = new NakamuraFamily();
}
}
这是中村先生家庭的类。当按照上述方式创建类时,每次生成对象时都会保存“lastname”,因此内存会为每个对象分配。
然而,中村先生的家族类中的任何对象都必须具有“lastname”为中村的属性。在数值不变的情况下,可以考虑添加static关键字。
class NakamuraFamily {
static String lastname = "中村";
}
public class Sample {
public static void main(String[] args) {
NakamuraFamily nakamura1 = new NakamuraFamily();
NakamuraFamily nakamura2 = new NakamuraFamily();
}
}
通过在上述代码中添加”static”,可以实现仅在内存中分配一次。
静态方法
在静态方法中,无法引用对象变量。变量必须带有static修饰符。
这个理由是因为带有 “static” 的静态变量和静态方法在程序启动时就会被分配到内存中,而对象变量和方法只在实例化后才会被分配到内存中。
换句话说,静态变量和静态方法与对象变量和方法在内存中分配的时间不同,静态变量和静态方法在分配时刻,对象变量和方法尚未分配到内存中。
在创建Util类或辅助类时,经常使用静态方法。
单例模式
class Singleton {
// 静的変数として定義したので、プログラム起動時に1回だけ、 メモリに割り付けられる。
private static final instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
请参考