作者简介: zoro-1,目前大一,正在学习Java,数据结构等
作者主页: zoro-1的主页
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
被static修饰意味什么
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对
象,是所有对象所共享的。
static修饰成员变量
- 1.不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
- 2.既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问,本类中直接调用
- 3.类变量存储在方法区当中
- 4.生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
static修饰成员方法
- 1.不属于某个具体的对象,是类方法
- 2.可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
- 3.不能在静态方法中访问任何非静态成员变量和非静态方法(没有this参数,除非在方法中实例化对象,才被调用)
代码块调用顺序
Java代码块的执行顺序如下:
1.静态代码块:当类被加载时,静态代码块会被执行,且只会被执行一次。
2.实例代码块:每次创建类的实例时,实例代码块都会被执行,并且在构造方法之前执行。
3.构造方法:在实例代码块执行之后,构造方法会被执行。
4.普通代码块:在方法中定义的普通代码块会在方法调用时被执行。
代码例子
class Parent { static { // 父类静态代码块 System.out.println("父类静态代码块"); } { // 父类初始化块 System.out.println("父类初始化块"); } public Parent() { // 父类构造方法 System.out.println("父类构造方法"); } } class Child extends Parent { static { // 子类静态代码块 System.out.println("子类静态代码块"); } { // 子类初始化块 System.out.println("子类初始化块"); } public Child() { // 子类构造方法 System.out.println("子类构造方法"); } } public class Test { public static void main(String[] args) { Child child = new Child(); } }
输出结果为:
父类静态代码块 子类静态代码块 父类初始化块 父类构造方法 子类初始化块 子类构造方法
从输出结果可以看出,首先执行父类的静态代码块(因为父类在子类之前加载),然后执行子类的静态代码块,接着执行父类的初始化块和构造方法,最后执行子类的初始化块和构造方法。
小思考
为什么普通成员方法可以直接访问非静态变量,而静态方法不能直接访问非静态变量?
- 1.静态方法和静态变量在类初始化时已经分配内存,已经存在,因此随时可以调用。
- 2.非静态方法和非静态变量在类初始化时不存在,只有类实例化成对象时才分配内存而存在
- 今天的分享到这里就结束了,感谢大家支持,创作不易,希望大家能给博主个三连,