一、静态变量
由static修饰的变量
静态变量:在访问时可通过类名.方法名
或对象.方法名
进行访问,静态的变量对于类而言,在内存中只有一个,能被所有的类的实例去共享,所以如果想要所有的类去访问时,可以把变量设置为static。
非静态变量:在访问时须通过对象名.方法名
进行访问。
二、静态方法
1)调用形式
非静态方法的调用形式:对象.方法名
,不能类名.方法名
或者直接写方法名
。
静态方法的调用形式:类名.方法名
,方法名
,对象.方法名
。
2)非静态方法可以调用静态方法,但静态方法不能调用非静态方法,因为静态方法随着类的加载而加载。
*
三、静态代码块**
1)代码块分类
匿名代码块:随对象的创建而创建,用于赋初值;
静态代码块:由static修饰,加载初始化数据,随类加载执行,只执行一次
2)执行顺序
静态代码块→匿名代码块→构造方法
3)静态代码块只执行一次
四、例题
public class Demo01 {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println("cnt="+cnt);
}
static {
cnt /=3;
}
}
程序的输出结果为cnt=5
原因:静态成员属性和静态代码块的加载时机一样,加载类的时候执行,当有多个静态代码块和静态成员变量时根据声明的先后顺序来执行,main方法作为程序的入口最后执行.
五、总结
- 静态变量和静态方法可直接通过类名直接访问。
- 非静态方法可以调用静态方法,但静态方法不能调用非静态方法。
- 代码块的执行顺序为静态代码块→匿名代码块→构造方法。
- 匿名代码块,随类的加载而创建,用于赋初值;静态代码块随类加载执行,且只被执行一次,用于初始化类。
- 静态代码块按照声明的顺序先后执行。
六、参考链接
1、https://www.bilibili.com/video/BV1PP411M7zm/?spm_id_from=333.999.0.0&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3
2、https://www.bilibili.com/video/BV12J41137hu?p=73&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd3