静态代码块,构造代码块和构造函数的区别

时间:2022-12-15 23:50:51

      首先,静态代码块,构造代码块,和构造函数都存在于一个类中,只不过,他们执行的先后顺序和执行的次数不同。

      静态代码块,只执行一次,比如,当你想要创建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 一个人就是一个对象

比如,有这么一群人一起去找宝藏,当一个人找到通往宝藏的大门时,打开就进去了(这里就相当于一个静态代码块),而后面的人就不需要打开宝藏的门了,因为门开了,每进去一个就相当于创建一个对象。