1、概述
static是java语言中一个关键字,可以用来修饰方法和变量,但是不能用来修饰类(内部类除外),被static修饰的方法和变量不依赖对象,它们先与对象而存在,随着类的加载加载,直接通过类名访问,也可以对象访问,被static修饰会被该类的所有对象共享。
2、静态方法
1、被static修饰的方法
2、静态方法和非静态方法比较
静态方法: 只能访问静态成员方法
只能访问静态成员变量。
非静态方法:可以访问静态成员方法,也可以访问非静态成员方法
可以访问静态成员变量,也可以访问非静态成员变量
3、静态方法不能有this,super
4、可以被继承,不能被重写,而是被隐藏
3、静态变量
一、被static修饰的变量
二、静态变量和非静态变量的比较
1、静态变量存在于jvm的方法去中,非静态变量存在堆中
2、静态变量是属于类变量,随着类的加载而加载,非静态变量属于对象
3、静态变量可以直接类名访问,也可以对象访问,非静态变量只对象访问。
注意!!!
static不可以修饰局部变量!!!
4、静态代码块
用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方(方法内部除外),类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
static {
c = 3;
// System.out.println(c);// 不能访问声明定义在后面的静态变量
}
private static int c;
5、实例化时的加载顺序
静态代码块>代码块>构造方法
父类静态代码块>子类静态代码块>父类代码块>父类构造函数>子类代码块>子类构造函数
6导入(很冷门)
import static
列如导入math类所有静态资源
import static java.lang.Math.*
我们也可以指定只导入某个静态资源,后面加对应资源名