java成员初始化顺序_Java成员初始化顺序
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成员初始化顺序相关推荐
- java项目包创建顺序_java程序初始化的顺序
来自:http://blog.csdn.net/socoolfj/article/details/750425 http://www.cnblogs.com/miniwiki/archive/20 ...
- java 对象初始化过程_Java——对象初始化顺序使用详解
一. 代码块的概念 在探究对象初始化顺序之前,我们先通过代码来了解一下代码块的概念. class Test{ public static String str1; //静态字段 public Stri ...
- java 执行顺序_Java代码执行顺序
程序中代码执行的顺序非常重要,稍有不慎便会是程序运行出错,那么我将结合实例来分析代码中的执行. 名词解释 首先了解几个名词: 非静态代码块 直接由 { } 包起来的代码,称为非静态代码块 静态代码块 ...
- java 类的执行顺序_java类加载的顺序
类加载的顺序: 1.加载静态成员/代码块: 先递归地加载父类的静态成员/代码块(Object的最先):再依次加载到本类的静态成员. 同一个类里的静态成员/代码块,按写代码的顺序加载. 如果其间调用静态 ...
- java类的初始化方法_JAVA类初始化和实例初始化
一.类初始化过程 1.一个类要创建实例需要先创建和加载 (1) main方法所在的类需要先加载和实例化 2.一个子类要初始化,需要先初始化父类 3.一个类初始化就是执行方法 (1) () 方法由静态类 ...
- java声明和初始化数组_Java 中初始化数组
数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...
- java 静态变量加载顺序_java 成员变量 静态变量代码块 静态代码快加载顺序
序言 基类A 类B继承实现了A类 1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B 3,装载父类A后 ...
- java对象的初始化顺序_Java对象初始化顺序
初始化顺序: 1.有无父类? 有: 将父类加载进内存.直到将所有的父类加载完毕.再从顶层父类按照代码的顺序执行静态代码,执行完最顶层的,在执行下一层的,依次类推,直到执行完所有的静态代码. (1)如果 ...
- java中初始化的顺序_Java中 初始化的先后顺序?
我们在java中 Java中初始化的顺寻? java代码: package sru.love.c; class Person { String name = "Person"; s ...
最新文章
- 动态多尺度图表达3D人体骨架运动,实现精准预测效果超SOTA
- python面向对象重新梳理
- Windows Server 2008技术概述(自CSDN)
- java 通配符 日期_java – 使用带有通配符支持的SimpleDateFormat解析日期字符串(例如* yyyy * MM * dd * hh * mm * ss)...
- centos7如何安装samba-client_如何在基本图形模式下最小化全新安装CentOS 7?
- Centos7: 配置IO调度
- poi读取excel导入mysql_poi读取xlsx表格内容并插入到mysql中,OutOfMemoryError
- Kafka Manager界面添加Partition
- 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
- Java-压缩指针compressedOops
- 怎样在word文档画虚线_班级工作小技巧——怎样在word里画出美观正式的四线三格?...
- 李航统计学习方法笔记第一章
- 算法 后减前最大值,zt
- 微信小程序连接无法跳转/ can not navigate to tabBar page错误
- 路由器重温——BGP路由-1
- php intval获取手机号,微信小程序获取微信绑定授权手机号getPhoneNumber
- python panda3d教程_panda3d学习笔记(一)Hello World
- OpenGL图形旋转
- 从零到壹搭建一个商城架构--k8s集群安装
- 电磁波的加上Mur吸收边界条件的FDTD算法
热门文章
- SpringBoot入门到精通_第3篇 _应用组件分析
- 第七篇:Spring Boot整合Thymeleaf_入门试炼02
- 软件设计师 - 常用公式
- JavaScript-数据类型
- java多参方法_Java中多参数方法进阶
- 前端电子表数字字体_爬虫:如何优雅应对字体反爬
- linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
- Linux进程核心代码怎么查看,GCOV查看arm-linux代码覆盖率
- AVFoundation – AVAssetImageGenerator 截图
- AVFoundation – AVMetadataItem 获取媒体属性元数据