1、static变量
静态变量在内存中只有一个拷贝(节省内存)
在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)
所以一般在需要实现以下两个功能时使用静态变量:
- [x] 在对象之间共享值时
- [x] 方便访问变量时
2、static静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用。
不能用this和super关键字,只能访问所属类的静态成员变量和成员方法。。
静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的
了方便方法的调用会声明为static
3、static代码块
独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
4、static final 修饰成员变量和成员方法
可简单理解为“全局常量”
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
5、static静态类
如果一个类要被声明为static的,只有一种情况,就是静态内部类
1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法
2.静态内部类可以声明普通成员变量和方法
3.静态内部类可以单独初始化:
使用场景
内部类初始化无需实例化外部类;
当某个类需要接受多个参数进行初始化时,推荐使用静态类Builder构建。
6、import static和import的区别
一般我们导入一个类都用 import com.....ClassName;
而静态导入是这样:import static com.....ClassName.;
这里的多了个static,还有就是类名ClassName后面多了个 . ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
同理也可以导入静态变量