Java接口——static关键字

static成员变量

虽然Java语言中没有全局的概念,但可以通过static关键字来达到全局的效果。

static修饰的变量叫静态变量,静态变量属于类,在内存中只有一个复制(所有对象实例的该变量都指向同一个内存地址),只要静态变量所在的类被加载,这个静态变量就会被分配空间。

局部变量不允许定义为static。

static成员方法

static方法与static变量类似,属于类。

static方法中不能使用this和super关键字。

static方法不能调用非static变量和方法。因为静态方法是属于整个类的共享,不管这个类有没有实例化,静态方法都存在。但是非静态成员变量和非静态成员方法,在类没有实例化时,是不存在的。所以会有空指针异常。

static一个很重要的用途是实现单例模式

单例模式的特点是该类只能有一个实例。
为了实现这一功能,必须隐藏类的构造函数,即把构造方法声明为private,并提供一个创建对象的方法,由于构造方法被声明为private,外界无法直接创建这个类型的对象,只能通过该类的方法来获取类的对象。要到达这样的目的只能把创建对象的方法声明为static。
示例如下:
class Singleton{
private static Singleton instance = null;

private Singleton(){
}

public static Singleton getInstance(){
    if(instance == null)
        instance = new Singleton();
    return instance;
}

}

static代码块

static代码块在类中是独立于成员变量和成员方法的。它不在任何一个方法体内。JVM在加载类时会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行。static代码块经常被用来初始化静态变量。需要注意的是,这些static代码块只会被执行一次。
示例:

public class Test{
    private static int a;
    static{
        Test.a = 4;
        System.out.println(a);
        System.out.println("static block is called");
    }
    public static void main(String[] args){
        
    }
}

static内部类

static内部类是指被声明为static的内部类,可以不依赖于外部类实例对象而被实例化。
静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态变量和静态方法。(包括私有类型)可以用于build模式。

注意:只有内部类才能被定义为static


版权声明:本文为swjtu2014112194原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。