首先,静态代码块,构造代码块,和构造函数都存在于一个类中,只不过,他们执行的先后顺序和执行的次数不同。
静态代码块,只执行一次,比如,当你想要创建10个对象时,当创建第一个对象时,执行一次,然后当你继续创建剩余的对象时,这个静态代码块就不会被执行了。
而构造代码块与构造函数的异同点: 相同点:每创建一个对象,构造代码块和构造函数都执行一次,不同点:执行的顺序不同,先执行构造代码块,再执行构造方法。
首先,用代码展示静态代码块的执行过程
class StaticCode
{
static
{
System.out.println("我是静态代码块");
}
void del()
{
System.out.println("执行");
}
}
class Demo{
public static void main(String[] args)
{
for(int i=0;i<=1;i++)
new StaticCode().del();
}
}
输出结果:
我是静态代码块
执行
执行
构造代码块与构造函数执行过程:
class ant{
{
System.out.println("我是构造代码块1");
}
ant()
{
run();
}
void run()
{
System.out.println("我是构造函数");
}
{
System.out.println("我是构造代码块2");
}
}
public class asd {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=0;i<1;i++)
new ant();
}
}
执行结果:
我是构造代码块1
我是构造代码块2
我是构造函数
下面是个人的理解:
看完这三者的区别,估计又会有疑问,原因是什么,这里做一个比较生动的比喻,一个类,就好比一些类似对象的抽象集合。
1 一个main方法就是一个宝藏
2 一个人就是一个对象
比如,有这么一群人一起去找宝藏,当一个人找到通往宝藏的大门时,打开就进去了(这里就相当于一个静态代码块),而后面的人就不需要打开宝藏的门了,因为门开了,每进去一个就相当于创建一个对象。