Java静态代码块、构造函数、构造代码块

时间:2023-02-11 18:35:08
 
 
package test;  public class Test {         public static void main(String... args) {          TestA a;          a = new TestA();          a = new TestA();          TestA aa = new TestA();      }  }    class TestA {      {          System.out.println("TestA code create");      }                private TestB b = new TestB();                private static TestC c = new TestC();                          public TestA() {              System.out.println("TestA create");      }                          static {             System.out.println("TestA static create");      }  }    class TestB {           public TestB() {          System.out.println("TestB create");      }  }    class TestC {           public TestC() {          System.out.println("TestC create");      }  }

打印结果

TestC create
TestA static create
TestA code create
TestB create
TestA create
TestA code create
TestB create
TestA create
TestA code create
TestB create
TestA create


static特点:

  1.    随着类的加载而加载(随着类的消失而消失,生命周期最长)  
 2.    优先于对象存在  
 3.    被所有对象所共享  
 4.    可以直接被类所调用  
 5.    static是一个修饰符,用于修饰成员

构造代码块

作用:给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。

 和构造函数的区别:
 构造代码块是给所有对象进行统一初始化;而构造函数是给对应的对象初始化
 构造代码块中定义的是不同对象共性的初始化内容

静态代码块

 static
 {
     静态代码块中的执行语句;
 }
 特点:随着类的加载而执行,只执行一次(再new一个对象也不会执行,类只加载一次),
 如果定义在有主函数的类中,则优先于主函数执行。用于给类进行初始化。
 有些类不用创建对象,无法用构造函数初始化,就通过静态代码块初始化。

 执行顺序:静态代码块先执行,如果有对象,构造代码块先执行,然后是构造函数。
 如果没有对象,则构造代码块和构造函数都不会执行。