JAVA代码块的相关知识点
类什么时候会被加载?
1、创建对象实例时
2、创建子类对象实例,父类也会被加载
3、使用类的静态成员时
原则,父>子,静>非静>构造器
使用静态成员时,静态代码块会被加载,依旧是父>子`
/**
父类
*/
package com.study.code_block;
public class Father {
//静态代码块 最优先调用 只会执行一次
static {
System.out.println("f1");
}
//非静态代码块 其次被调用 只会执行一次
{
System.out.println("f2");
}
//最后被调用
public Father() {
System.out.println("f3");
}
}
/**
子类
*/
package com.study.code_block;
/**
* 总结:
* 父先于子,静态先于一切,非静先于构造器
* 使用静态成员的时候就会加载静态代码块,同样父先于子
* */
public class CodeBlock extends Father {
public static int count = 0;
//静态代码块 最优先调用 只会执行一次
static {
System.out.println("s1");
}
//非静态代码块 其次被调用 只会执行一次
{
System.out.println("s2");
}
//最后被调用
public CodeBlock() {
System.out.println("s3");
}
}
/**
测试类
*/
package com.study.code_block;
public class Test {
public static void main(String[] args) {
// CodeBlock codeBlock = new CodeBlock();
// Father father = new CodeBlock();
// 跟多态没有任何关系
int c = CodeBlock.count;
}
}
静态代码块每次创建同一个对象(对象只会加载一次),只会加载一次
静态代码块和静态属性每次随着类的加载,其初始化的优先级相同,按书写顺序执行。
非静态代码块和非静态属性初始化的优先级相同,按书写书写顺序执行。