/**
* 类的初始化顺序。
* 1.执行主函数 Day06 d = new Day06(1);首先加载类Day06,静态变量i和静态代码块随着类加载而加载,同时加载j,默认值为0,输出“静态代码块”
* 2.执行构造函数Day06(1),首先执行this()即无参构造函数(如果没写this()则默认执行super())
* 3.执行无参构造函数中的super();显示初始化,给j赋值,j=9;执行构造代码块,输出“构造代码块”;输出“无参构造函数”
* 4.Day06(1)中的this()执行完毕,继续显示初始化;构造代码块每个对象只能执行一次,所以此处不再执行;输出“有参构造函数”
* */
class Day06
{
static int i=2;//随着类的加载而加载。加载到方法区中的静态区中。
int j=9;//定义了一个属性,也就是一个成员变量,也叫实例变量。当对象存在时,该变量存在于堆内存的对象中。
static{//静态代码块。随着类的加载而执行。
System.out.println("静态代码块...i="+i);
}
Day06(int a){//带一个int参数的构造函数。
this();//调用了本类中空参数的构造函数。
//显示初始化。
//构造代码块
System.out.println("有参的构造函数...i="+i+",j="+j);
}
{ //构造代码块,定义在类中的代码块,用于给所有对象进行初始化动作的代码块。
System.out.println("构造代码块...i="+i+",j="+j);
}
static void show(){//静态函数。函数中没有访问非静态的成员。
System.out.println("静态show方法...i="+i);
}
Day06(){// 空参数的构造函数。
super();// 默认带一个super无参构造函数,只是没有显示出来
//显示初始化,j=9
//构造代码块执行
System.out.println("无参的构造函数..."+",j="+j);
}
}
public class LeiChushihua {
public static void main(String[] args) {
Day06 d = new Day06(1);//通过Day06.class类文件创建了对象。
//int a = Day06.i;
System.out.println("----");
new Day06();
show();
}
public static void show()
{}
}
类的初始化顺序
最新推荐文章于 2018-01-05 01:01:15 发布