关键字:static
作用:主要用于内存管理
范围:可以用在变量、方法、代码块和嵌套类上。java关键字属于类,但不是类的实例。
类的成员变量包括:
【静态变量/类变量】:指被static修饰的成员变量
运行时,只分配一次内存。在加载类的过程中完成静态变量的内存分配。
类的内部可以在任何方法中直接访问静态变量;其他类中可以通过类名访问该类的静态变量。
静态变量的最主要作用是节省内存空间。
【实例变量】:指没有被static修饰的成员变量
每创建一个实例,java虚拟机就会为实例变量分配一次内存。
类的内部可以在非静态方法中直接访问实例变量;本类的静态方法或其他类中需要通过类的实例对象进行访问。
类的方法包括:
【静态方法/类方法】:指被static修饰的成员方法
通过类直接调用,不需要创建类的对象。可以直接通过类名.方法名调用
静态方法中只能访问类成员变量,不能访问实例变量(同理,静态方法只能访问静态方法,而实例方法可以访问类方法和实例方法)
静态方法中不能使用super、this关键字
静态方法的调用通过类名.类方法和对象.类方法
public static void method1();
【实例方法】:指没有被static修饰的成员方法
可以直接访问所属类的静态变量、静态方法、实例变量和实例方法
实例方法只能通过对象.实例方法访问
实例方法可以被覆盖(静态方法不能被覆盖)
public void method2();
【构造方法】:指没有返回值(没有void)方法名与类名一样的方法
方法名与类名相同 不要返回类型(例如return、void等) 不能被static、final、native、abstract和synchronized修饰,不能被子类继承
public method(){};
类的实例化过程:
1)给对象分配空间,对属性按照类型进行默认初始化
2)加载父类->本类->子类静态代码块
3)初始化父类属性、父类构造代码块、父类构造方法。
4)初始化本类属性、构造代码块、构造方法。
5)初始化子类属性、构造代码块、构造方法。
总结:对象空间的分配和默认属性的初始化->静态代码初始化->属性、构造代码块、构造方法初始化(根据代码书写的先后顺序)
静态代码块若使用了某个静态成员变量,那么该静态成员变量一定比静态代码块先加载
附录一:关键字及作用分类(转载自尚硅谷《java从入门到精通》)