static关键字可以修饰的元素:
- 属性 所有对象共享,称为静态变量或类变量;不用static修饰的属性称为实例变量。static只能修饰属性,不能修饰局部变量。
- 方法 不需要实例化就可以直接访问,称为静态方法或类方法;
- 代码块 使用static修饰的,不包含在任何方法体的代码块,称为静态代码块
静态属性
用static修饰的属性,他们在类被载入时创建,只要类存在,static变量就存在。
静态变量和非静态变量的区别:静态变量被所有的对象所共享,在内存中只有一个副本,他当且仅当在类初次加载时会被初始化。而非静态变量是对象多拥有的,再创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
两种方式访问:
- 直接访问:类型.属性
- 实例化后访问:对象名.属性(不建议使用)
静态方法
静态方法不需要实例化,可以直接访问,静态方法中不能直接访问非静态属性以及非静态成员方法。访问方式:
- 直接访问:类名.方法名()
- 实例化后访问:对象名.方法名()(不建议使用)
注意事项:
- 静态方法不能修饰构造器(构造方法)
- 静态方法中不能使用this关键字
- 静态方法里只能直接访问静态属性和方法,而不能直接访问类中的非静态属性和方法
静态语句块
- 当类被载入时,静态代码块被执行,且只被执行一次
- 静态块经常用来进行类属性的初始化