一、静态变量和静态函数
1、类加载时,先将静态成员加载入方法区中的静态存储区
2、静态变量一般用于所有对象都共有的数据,因此可以将数据设为静态,由类保存,无需每个对象都存有一份数据。
3、静态函数不能访问非静态成员变量,因为非静态成员变量是属于对象的数据,由对象创建而存在,当对象未创建时,非静态成员变量还未存在。而静态函数,随着类的加载就存储在静态存储区域,所以静态函数内不能访问非静态成员变量。
4、静态函数里面,不能存在this关键字,原因是this表示当前对象,而静态方法是随类加载存在,还未创建对象,所以不能出现this。
二、静态代码块
1、随着类的加载而执行,当执行同个类的多个对象创建时,只进行一次类的加载即可,所以静态代码块只执行一次。
2、作用:给类进行初始化。构造函数给对象进行初始化。当类无需创建对象时(类中全为静态成员),无需构造函数。当类无需对象时,可用静态代码块进行数据附初值。
Class person{
static String country;
static{
country = "China";
}
}
三、构造代码块
1、给对象进行通用初始化,随着对象的创建而执行,即每创建一个对象执行一次。(注意与静态代码块区分)
Class person{
private String name;
{
name = "啦啦啦";
}
}
四、静态代码块,构造代码块,构造函数的执行顺序
静态代码块>构造代码块>构造函数