Java 中 static 关键字主要用于内存管理。Java 中 static 关键字可用于修饰 变量、方法、代码块、嵌套类。static 关键字修饰的对象属于类,而不是类的实例。
static 可以是:
- 变量(类变量或静态变量)方法(类方法或静态方法)代码块(静态代码块)嵌套类(静态内部类)
用 static 修饰的变量称为静态变量(类变量)。
静态变量的优点:
静态变量使程序存储器更高效(节省内存)
注:
静态变量属于类,不属于类的实例,所有类的实例共享静态变量,所以不会在每个类的实例创建多个副本,这就是节省内存的原因。因为静态变量是类的实例共享的,这也是它的缺点,有可能造成线程不安全的。
静态方法 - 类方法
用 static 修饰的方法称为静态方法(类方法)。
静态方法属于类,不属于类的实例。静态方法可以用类直接调用,无需创建类的实例,当然也可以用类的实例调用。静态方法可以访问静态变量、静态方法,但不能直接访问非静态变量和非静态方法。
静态方法限制:静态方法不能直接使用非静态变量或调用非静态方法。this 和 super 两个关键字不能在静态上下文中使用。
为什么 Java main 方法是静态的 ?
@TODO
静态代码块
Java 中静态代码块主要有两个作用:
用于初始化静态变量在类加载是在 main 方法之前执行
注:
静态代码快在main方法和构造方法之前初始化。
静态内部类是指使用 static 修饰的内部类。例如:
public class OuterClass {
static class InnerClass {
// ...
}
}
创建静态内部类的实例时,不需要创建外部类的实例。静态内部类中可以定义静态成员和实例成员。静态内部类可以直接访问外部类的静态成员,若要访问外部类的实例成员,则需要通过外部类的实例访问。其它类可以创建静态内部类,但需要加上外部类名作为前缀,且静态内部类受外部类的权限修饰符(public, protected, private, default) 的限制。



