1.什么是静态属性、静态方法
用static修饰符修饰的属性和方法叫作静态属性和静态方法
1
静态属性和非静态属性的区别:
1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区里,而非静态的都存在堆内存中
2.出现的时机不同:静态属性和方法在没创建对象之前就存在,而非静态的需要在创建对象才存在
3.静态属性是整个类都公用的
4.生命周期不一样,静态在类消失后被销毁,非静态在对象销毁后销毁
5.用法:静态的可以直接通过类名访问,非静态只能通过对象进行访问
2.使用static的注意事项
带静态修饰符的方法只能访问静态属性
非静态方法既能访问静态属性也能访问非静态属性
非静态方法不能定义静态变量
静态方法不能使用this关键字
静态方法不能调用非静态方法,反之可以
3.父子类中静态和非静态的关系
对于非静态属性,子类可以继承父类非静态属性,但是当父子类出现相同的非静态属性时,不会发生子类的重写并覆盖父类的非静态属性,而是隐藏父类的非静态属性
对于非静态方法,子类可以继承并重写父类的非静态方法
对于静态属性,子类可以继承父类的静态属性,但是如何和非静态属性一样时,会被隐藏
对于静态方法,子类可以继承父类的静态方法,但是不能重写静态方法,同名时会隐藏父类的
注:静态属性、静态方法、非静态属性都可以被继承和隐藏,但是不可以被重写,
非静态方法可以被重写和继承
4.静态代码块
静态代码块只能写在类中方法外,不能写在方法中,它会随着类的加载而优先于各种代码块和构造方法的加载,并且只会
加载一次,如果出现多个静态代码块,会按照书写顺序加载
1
2
静态代码块的作用:
一般情况下,有些代码需要在项目启动的时候就执行,这时候就需要静态代码块,比如一个项目启动需要加载配置文件,或初始化内容等。
静态代码块不能出现在任何方法体内
对于普通方法:普通方法是需要加载类new出一个实例化对象,通过运行这个对象才能运行代码块,而静态方法随着类加载就运行了。
对于静态方法:在类加载时静态方法也加载了,但是必须需要类名或者对象名才可以访问,相比于静态代码块,静态方法是被动运行,而静态代码块是主动运行
静态代码块不能访问普通变量
普通变量只能通过对象调用的,所以普通变量不能放在静态代码块中。
5.普通代码块和构造代码块
静态代码块和构造代码块在声明上少一个static关键字
执行时机:
构造代码块在创建对象时被调用,每次创建对象都会调用一次,且优先于构造函数执行。
注:不是优先于构造函数执行,而是依托于构造函数,如果不创建对象就不会执行构造代码块
普通代码块和构造代码块的区别在于,构造代码块是在类中定于的,而普通代码块是在方法体中定义的,执行顺序和书写顺序一致。
6.执行顺序
静态代码块>构造代码块>构造函数>普通代码块
————————————————
版权声明:本文为CSDN博主「久治长安」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43821892/article/details/90054868