类对象的初始化:
1.static成员变量的初始化
2.static块的初始化
//与实际在代码中的位置有关
3.实例成员变量的初始化
4.实例块的初始化
//与实际在 代码中的位置有关
5.构造函数
构造函数:
可以重载 无返回值 如果你没有写构造函数,系统会给出默认构造函数,如果已经写了,则调用构造函数不符时会出错
实例初始化:
实例,实例,即依赖于对象的成员进行的初始化,每个对象产生前都要调用一次
普通与static:同名的成员和方法可以定义
******************普通成员 ************* 静态成员
普通方法 **********可以******************可以
静态方法 **********不可以 ****************可以
class data{
String year;
String month;
String day;
static int days;
static{
System.out.println("data static init block!");
days = 0;
}
//实例(依赖于对象的成员)初始化块 对象产生之前都要调用一次
//实例初始化块先调用,然后是对象的构造函数调用
{
System.out.println("data instance init block!");
this.year = null;
this.month = null;
this.day=null;
}
public data() {
System.out.println("data data()");
}
public data(String year,String month,String day) {
this.year=year;
this.month=month;
this.day=day;
System.out.println("data data()");
}
}
public class my {
int a;
char b;
static data c=new data("2012","10","1");
static{
System.out.println("my static init block!");
}
//实例(依赖于对象的成员)初始化块 对象产生之前都要调用一次
//实例初始化块先调用,然后是对象的构造函数调用
{
System.out.println("my instance init block!");
this.a = 0;
this.b = 0;
}
public my() {
System.out.println("my Person()");
}
public static void main(String[] args) {
my b=new my();
}
}
结果输出:
data static init block!
data instance init block!
data data()
my static init block!
my instance init block!
my Person()
分析:在main中创建my对象———>先初始化my中的static成员变量,即data对象(data的static成员变量——>data的static块初始化 ——>data的实例初始化——>data的构造函)——>my的static块初始化——>my的普通成员的初始化——>my的实例块初始化——>my的构造函数
*将my的成员变量c设置为普通成员变量,即去掉static*
public class my {
int a;
char b;
data c=new data("2012","10","1");
static{
System.out.println("my static init block!");
}
{
System.out.println("my instance init block!");
this.a = 0;
this.b = 0;
}
public my() {
System.out.println("my Person()");
}
public static void main(String[] args) {
my b=new my();
}
}
输出结果:
my static init block!
data static init block!
data instance init block!
data data()
my instance init block!
my Person()
分析:在main中创建my对象———>先初始化my中的static成员变量(my中现在没有static成员变量)——>my的static初始化——>my的普通成员的初始化(data的static成员变量——>data的static初始化 ——>data的实例初始化——>data的构造函)——>my的实例初始化——>my的构造函数
*将my实例化块放在普通成员变量的前面*
public class my {
{
System.out.println("my instance init block!");
this.a = 0;
this.b = 0;
}
int a;
char b;
data c=new data();
static{
System.out.println("my static init block!");
}
//实例(依赖于对象的成员)初始化块 对象产生之前都要调用一次
//实例初始化块先调用,然后是对象的构造函数调用
public my() {
System.out.println("my Person()");
}
public static void main(String[] args) {
my b=new my();
}
}
输出结果:
my static init block!
my instance init block!
data static init block!
data instance init block!
data data()
my Person()
分析:在main中创建my对象———>先初始化my中的static成员变量(my中现在没有static成员变量)——>my的static初始化——>my的实例初始化——>my的普通成员的初始化(data的static成员变量——>data的static初始化 ——>data的实例初始化——>data的构造函)——>my的构造函数