关于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;
    }
}

请参考

 

广告
将在 10 秒后关闭
bannerAds