一:本类(基础)
public class HelllA {
private String name;
public HelllA() {
System.out.println("A的无参构造");
}
public HelllA(String name){
System.out.println("A的有参构造");
}
{
System.out.println("I'm A class");
}
{
System.out.println("I' A尔尔");
}
static {
System.out.println("static A");
}
public static void main(String[] args) {
new HelllA();
new HelllA("sss");
}
}
执行结果
可以看出,只要new一次HelllA对象,我们的代码块就会执行一次,而且是先于构造器执行,而static代码块就只会执行一次。
总结:执行顺序:static(最先执行,而且只执行一次)>{}>构造方法
二:继承类(进阶)
public class HelllB extends HelllA {
public HelllB() {
System.out.println("B的无参构造");
}
{
System.out.println("I'm B class");
}
static {
System.out.println("static B");
}
public static void main(String[] args) {
new HelllB();
}
//static A;static B;A无参;B无参;I'm B class
}
class HelllA {
private String name;
public HelllA() {
System.out.println("A的无参构造");
}
public HelllA(String name){
System.out.println("A的有参构造");
}
{
System.out.println("I'm A class");
}
{
System.out.println("I' A尔尔");
}
static {
System.out.println("static A");
}
// public static void main(String[] args) {
// new HelllA();
// new HelllA("sss");
// }
}
运行结果:
总结:首先,new一次HellB类同基础一,但是,HelllB继承了HelllA,所以,先执行A的static代码块,再而执行B的static代码块(静态代码块随着类的加载而执行,而且只执行一次)执行完成之后,就又到了A的代码块{},再B的代码块{},最后就是B的无参构造器。
在面试中的笔试会比较常见到,一定要牢记,这里算是给自己总结并分享给你们,面试中,基础尤为重要,框架也是基于基础,一旦基础不好,在项目中就会产生各种你想不到的Bug
如果觉得对你有帮助的话,请点个赞加关注呗!