static静态关键字修饰:属性,方法,内部类,代码块
static修饰的资源属于类级别,由全体对象共享资源。
1)属性
使用static修饰的属性,属于类的全体类的实例共享的变量,静态属性在类的加载初期初始化,使用类名.属性访问 如:System.out
2)实例变量
属于对象的属性,使用对象.属性访问 如:Person.name
举例详解:
public class StaticFieldDemo{
public static void main(String [] args){
XMM mm1=new XMM();
XMM mm2=new XMM();
XMM mm3=new XMM();
System.out.PRintln(mm1.id+""+mm2.id+""+mm3.id+""+XMM.i);
}}
class XMM{
int id; //实例变量
static i=0;//静态类级别变量
public XMM(){ //构造函数
id=i++;
}}
结果:0123
注:int id实例变量,相当于“”每个人的水杯“
static int i=0 静态类级别变量,相当于“公用的水桶”
执行步骤:1.加载类,static变量在类家在期间初始化
2.在内存中分配对象空间,属性默认自动初始化 ,为“0”值
3.进行属性的赋值
4.递归调用父类构造器,默认调用无参构造器
5.调用本类构造器
3)静态方法
使用static声明的方法,属于类的方法,在类加载后就可以自己调用,不需要创建类的实例对象
静态方法不能访问属于对象的资源(对象属性,对象方法)
4)静态代码块
静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次,一般用在类加载以后初始化一些静态资源 如:加载配置文件
static{ }
举例:class XMMM { // 代码块 { System.out.println("代码块,创建对象执行,创建对象了"); } // 静态代码块 static { System.out.println("静态代码块,类加载期间执行初始化,类加载了"); } public XMMM() { // 构造函数 System.out.println("构造好了"); }}
结果:静态代码块,类加载期间执行初始化,类加载了 代码块,创建对象执行,创建对象了 构造好了
新闻热点
疑难解答