关于这个问题,全局变量(成员变量)是在创建对象的时候分配内存的创建对象过程为1分配空间2递归的创建父类对象(无父类这步可省略)3初始化成员变量4调用构造方法创建一个对象静态变量是在类加载的时候分配空间的,静态变量和对象没有关系是在JVM第一次读到一个类的时候加载信息的过程中分配空间的类加载过程为1加载父类(如果父类已经加载过,则不在加载)2初始化静态属性3按顺序的初始化静态代码块初始化的前提就是分配空间而且静态变量在以后的创建对象的时候不在初始化所以一般用静态来保存共享信息
创新互联建站拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站建设、网站制作、网站维护、遂宁服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、成都商城网站开发、政府网站等各类型客户群体,为全球上1000家企业提供全方位网站维护、服务器维护解决方案。
1.父类静态代码块;
2.子类静态代码块;
3.父类非静态代码块;
4.父类构造函数;
5.子类非静态代码块;
6.子类构造函数;
举例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
先说执行顺序:我们在new一个对象时,如果类还没加载,就需要先将类加载到内存,此时就会执行静态代码块,在创建对象时,是先执行代码块,然后执行构造器。所以静态代码块、代码块、构造器的执行顺序是:静态代码块→代码块→构造器。
再说作用:静态代码块是用于初始化类的(在加载类时执行,只执行一次),代码块是用于初始化对象的(在创建对象时执行,每次创建对象时都执行),构造器是用于创建对象的。
原因就是一句话:先有了父亲,才会有儿子!
程序运行时,加载AB两类,因为A是B子类,所以先加载B类,Load B,再加在A类 LoadA,调用A a = new A()代码时,会先调用其父类B的构造方法 Create B 再调用A的构造方法 Create A
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款