1. 初始化顺序

在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量散布于方法定义之间,他们仍会在任何方法(包括构造器)被调用之前初始化。

2. 静态成员初始化顺序

1⃣️初始化类的静态成员或者静态块,静态初始化只在Class对象首次加载的时候进行一次。

2⃣️执行构造器

3⃣️初始化非静态成员

例如:

public classAnimal {publicAnimal(String name) {

System.out.println("Animal [" + name + "]");

}public voidm1() {

System.out.println("Animal.m1 is invoked.....");

}

}

public classCar {publicCar(String name) {

System.out.println("Car [" + name + "]");

}public voidm1() {

System.out.println("Car.m1 is invoked.....");

}

}

public classTable {static Animal a1 = new Animal("a1");

Table() {

a1.m1();

}public voidm1() {

System.out.println("Table.m1 is invoked.....");

}static Car c1 = new Car("c1");

}

public classStaticInitialization {static Table t1 = newTable();static Table t2 = newTable();public static voidmain(String[] args) {

System.out.println(t1.a1==t2.a1);

}

}

输出结果:

Animal [a1]

Car [c1]

Animal.m1 is invoked.....

Animal.m1 is invoked.....true

由输出结果,可以看出t1和t2的成员a1是同一个对象,说明Table类的静态成员a1,c1只初始化了一次。

3. 非静态实例初始化

Java中也有被称为实例初始化的类似语法,用来初始化每一个对象的非静态变量。同样,初始化是发生在构造器之前的。

例如:

public classMug {

Mug(intmarker) {

System.out.println("Mug[" + marker + "]");

}

}

public classMugs {

Mug mug1;

Mug mug2;

static Mug mug3;//非静态成员初始化

{

mug1= new Mug(1);

mug2= new Mug(2);

}

static {

mug3 = new Mug(3);

}

Mugs() {

System.out.println("Mugs is created...");

}

}

public static voidmain(String[] args) {

Mugs mugs= newMugs();

}

输出结果:

Mug[3]

Mug[1]

Mug[2]

Mugs is created..

从输出结果可以看出,实例初始化子句是在静态代码块之后,构造器之前执行的。

这种语法对于支持”匿名内部类“的初始化是必须的。

java成员初始化顺序_Java成员初始化顺序相关推荐

  1. java项目包创建顺序_java程序初始化的顺序

    来自:http://blog.csdn.net/socoolfj/article/details/750425   http://www.cnblogs.com/miniwiki/archive/20 ...

  2. java 对象初始化过程_Java——对象初始化顺序使用详解

    一. 代码块的概念 在探究对象初始化顺序之前,我们先通过代码来了解一下代码块的概念. class Test{ public static String str1; //静态字段 public Stri ...

  3. java 执行顺序_Java代码执行顺序

    程序中代码执行的顺序非常重要,稍有不慎便会是程序运行出错,那么我将结合实例来分析代码中的执行. 名词解释 首先了解几个名词: 非静态代码块 直接由 { } 包起来的代码,称为非静态代码块 静态代码块 ...

  4. java 类的执行顺序_java类加载的顺序

    类加载的顺序: 1.加载静态成员/代码块: 先递归地加载父类的静态成员/代码块(Object的最先):再依次加载到本类的静态成员. 同一个类里的静态成员/代码块,按写代码的顺序加载. 如果其间调用静态 ...

  5. java类的初始化方法_JAVA类初始化和实例初始化

    一.类初始化过程 1.一个类要创建实例需要先创建和加载 (1) main方法所在的类需要先加载和实例化 2.一个子类要初始化,需要先初始化父类 3.一个类初始化就是执行方法 (1) () 方法由静态类 ...

  6. java声明和初始化数组_Java 中初始化数组

    数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...

  7. java 静态变量加载顺序_java 成员变量 静态变量代码块 静态代码快加载顺序

    序言 基类A 类B继承实现了A类 1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B 3,装载父类A后 ...

  8. java对象的初始化顺序_Java对象初始化顺序

    初始化顺序: 1.有无父类? 有: 将父类加载进内存.直到将所有的父类加载完毕.再从顶层父类按照代码的顺序执行静态代码,执行完最顶层的,在执行下一层的,依次类推,直到执行完所有的静态代码. (1)如果 ...

  9. java中初始化的顺序_Java中 初始化的先后顺序?

    我们在java中 Java中初始化的顺寻? java代码: package sru.love.c; class Person { String name = "Person"; s ...

最新文章

  1. 动态多尺度图表达3D人体骨架运动,实现精准预测效果超SOTA
  2. python面向对象重新梳理
  3. Windows Server 2008技术概述(自CSDN)
  4. java 通配符 日期_java – 使用带有通配符支持的SimpleDateFormat解析日期字符串(例如* yyyy * MM * dd * hh * mm * ss)...
  5. centos7如何安装samba-client_如何在基本图形模式下最小化全新安装CentOS 7?
  6. Centos7: 配置IO调度
  7. poi读取excel导入mysql_poi读取xlsx表格内容并插入到mysql中,OutOfMemoryError
  8. Kafka Manager界面添加Partition
  9. 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
  10. Java-压缩指针compressedOops
  11. 怎样在word文档画虚线_班级工作小技巧——怎样在word里画出美观正式的四线三格?...
  12. 李航统计学习方法笔记第一章
  13. 算法 后减前最大值,zt
  14. 微信小程序连接无法跳转/ can not navigate to tabBar page错误
  15. 路由器重温——BGP路由-1
  16. php intval获取手机号,微信小程序获取微信绑定授权手机号getPhoneNumber
  17. python panda3d教程_panda3d学习笔记(一)Hello World
  18. OpenGL图形旋转
  19. 从零到壹搭建一个商城架构--k8s集群安装
  20. 电磁波的加上Mur吸收边界条件的FDTD算法

热门文章

  1. SpringBoot入门到精通_第3篇 _应用组件分析
  2. 第七篇:Spring Boot整合Thymeleaf_入门试炼02
  3. 软件设计师 - 常用公式
  4. JavaScript-数据类型
  5. java多参方法_Java中多参数方法进阶
  6. 前端电子表数字字体_爬虫:如何优雅应对字体反爬
  7. linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
  8. Linux进程核心代码怎么查看,GCOV查看arm-linux代码覆盖率
  9. AVFoundation – AVAssetImageGenerator 截图
  10. AVFoundation – AVMetadataItem 获取媒体属性元数据