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一个对象也不会执行,类只加载一次),
如果定义在有主函数的类中,则优先于主函数执行。用于给类进行初始化。
有些类不用创建对象,无法用构造函数初始化,就通过静态代码块初始化。
执行顺序:静态代码块先执行,如果有对象,构造代码块先执行,然后是构造函数。
如果没有对象,则构造代码块和构造函数都不会执行。