static
一、 static修饰符
static可以用来修饰属性、方法和代码块。通常把static修饰的属性和方法称为类属性(类变量)和类方法。不使用static 修饰的属性和方法属于单个对象,通常称为实例属性(实例变量)和实例方法。
二、类的加载机制
在加载类的过程中, 完成静态变量的内存分配,再执行静态块,两者是在创建对象之前执行的。
静态变量也也称作为全局变量,它被static修饰符修饰,与成员变量不同的是,静态变量不依赖于特定的对象实例,而是被所有的实例共享,只要一个类被加载,JVM就会给静态变量分配存储空间,因此就可以通过类名和变量名来访问静态变量。
三、代码的执行顺序
从上到下:
两个静态修饰变量
两个成员变量
静态的代码块
无参构造方法
静态的成员方法
主函数
创建了实例对象
通过类名调用了静态变量
也可通过对象调用静态成员方法
对象调用成员变量
执行顺序结果:
四、继承关系下代码执行顺序
结果:
这里看出在创建StaticTest这个类对象之前,静态修饰的代码块就已经被jvm给予内存空间。首先执行的是静态的代码块。然后执行主函数,再创建StaticTest这个类对象之后,按照代码逻辑,先调用demo1中的无参,在调用demo2中无参。
这里注意:demo2继承demo1,在调用demo2的无参时会先调用demo1的无参,即父类的无参默认在第一行,再调用子类。
函数的执行得由对象去调用,只是创建对象是无法执行的。
五、总结
程序的执行顺序:
1.加载类,将class文件加载到JVM的内存中[开辟类的内存空间]
加载的时候,所有的static的属性和代码块都会按顺序执行
2.开始执行主函数
所有的方法[static方法和成员方法]必须要调用才会执行
3。创建某个类的对象[开辟对象的内存]
开辟对象的内存空间的时候,所有的成员属性和非静态代码块会按顺序执行