static可以用来修饰类、成员、方法。
1. 修饰类
通常是静态内部类(不能用static修饰顶级类)
譬如常用的builder模式。
class Foo {
private String name;
private Foo(String name) {
this.name = name;
}
@Override
public String toString() {
return "Foo{" +
"name='" + name + '\'' +
'}';
}
public static class Builder {
private String name;
public Builder setName(String n) {
name = n;
return this;
}
public Foo build() {
return new Foo(name);
}
}
public static void main(String[] args) {
System.out.println(new Builder().setName("test").build());
}
}
什么是顶级类:
class TopLevelClass { //顶级类 static class NestedTopLevelClass { //嵌套顶级类 } }
2. 修饰方法
通常称之为静态方法,是没有this对象的方法,因此不能访问任何非静态变量和方法。也就是在方法中不能使用this、super关键字。
- 反之可以,实例方法可以访问静态方法、变量,因为静态方法与类绑定
3. 修饰变量
通常称之为静态变量,静态变量被所有对象所共享,在内存中只有一个副本。存放于方法区(共享数据区)的静态区
- 静态变量的初始化顺序是按照定义顺序进行初始化的
- static是不允许用来修饰局部变量
- 静态变量的生命周期跟随类而不随对象
4. 修饰代码块
静态代码块可以放置于任何地方,初始化时将根据定义顺序进行。静态代码块将于类初次加载时调用,只会执行一次。
- 静态代码块调用是早于同级别构造函数和非静态构造块的
- 非静态初始化块的代码会在类构造函数之前执行,通常用于多个重载构造函数进行代码复用
5. 静态导包
用import static代替import静态导入包是JDK1.5中的新特性。
import static java.lang.System.out;
,意思是导入这个类里的静态方法。
- 注意这里只能导入静态方法或者静态类
- 这里导入可能会产生冲突。例如同时导入
import static java.lang.Integer.*;
和import static java.lang.Long.*;
网友评论