最近一直在看《thinking in java》一书,感觉里面东西讲的很细,很多东西都没有接触过,是值得各位java程序员仔细品味的一本好书。
今天看了关于类成员初始化那节,以前对于成员初始化顺序没有考虑那么多,没有在意初始化的顺序。今天特意仔细研究了一番。
一个类中,最首先被初始化的是静态成员,也就是有关键字static修饰的成员。只要一个类被使用也就是创建对象或者调用了该类的某个静态方法时静态成员就都会被初始化,并且静态数据在内存中只占用一份存储区域,无论创建多少个对象,静态数据被所有对象共享。
初始化静态成员后再初始化非静态成员。对于非静态成员之间,也是有初始化顺序的,变量定义的顺序决定了初始化的顺序(无论成员变量在哪里定义,都会在函数调用之前得到初始化)
直接定义成员初始化完成后才会执行构造函数初始化。
具体看例子:
1 public class House { 2 //对于非静态成员变量,谁先定义谁就先被初始化。顺序为w1、w2、w3 3 Window w1 = new Window(1); 4 public House() { 5 System.out.println("House()"); 6 w3 = new Window(33); 7 } 8 Window w2 = new Window(2); 9 void f(){ 10 System.out.println("f()"); 11 } 12 static void f1(){ 13 System.out.println("static f1()"); 14 } 15 Window w3 = new Window(3); //在函数f后面,但是在f调用之前得到了初始化 16 static Window w4 = new Window(4); //静态成员变量最先被初始化 17 /** 18 * @param args 19 */ 20 public static void main(String[] args) { 21 House h = new House(); 22 h.f(); 23 House.f1(); 24 } 25 26 } 27 class Window{ 28 public Window(int maker) { 29 System.out.println("Window("+maker+")"); 30 } 31 }
执行结果如下:
1 Window(4) 2 Window(1) 3 Window(2) 4 Window(3) 5 House() 6 Window(33) 7 f() 8 static f1()
这样很明显就能看出成员的初始化顺序了。
相关推荐
java笔记五:多线程地使用.pdf
java笔记java笔记java笔记java笔记java笔记java笔记java笔记
java笔记java笔记,java笔记java笔记java笔记java笔记
java学习笔记java学习笔记java学习笔记java学习笔记
Java Swing组件:Jlist学习笔记Java Swing组件:Jlist学习笔记
java鬼混笔记:JAVA发邮箱(带附件)
java笔记java笔记java笔记java笔记java笔记java笔记java笔记java笔记
1、预备知识 2、为何初始化 3、几种初始化方式 5、Tensorflow2.0中的权重初始化函数
java笔记java笔记java笔记java笔记
Java笔记Java笔记Java笔记Java笔记Java笔记Java笔记Java笔记
AURIX TC27X系列启动和初始化,详细介绍了TC27X系列上电BMI配置,初始化步骤,TC27xC TriCore™ AURIX™ 微控器初始化过程, 包括以下步骤: ⇒ 初始化 CPU0 的 C 运行环境( Cstart 程序), AURIX 复位后, CPU0 ...
java笔记java笔记java笔记java笔记 java笔记 java笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java动态网站:学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java笔记Java笔记Java笔记
java基础的几个例题包括静态成员,booblean数据类型的介绍
AudioPolicy&AudioFlinger初始化总体框架初始化步骤简介初始化步骤详细流程分析1、loadConfig()2、initialize()2.1、初始音频路由引擎2.2、加载so 并且打开设备节点2.3、打开输出流 总体框架 AudioFlinger和Audio...
2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解(Annotation) 2020-4-11 Java 集合 2020-4-15 java 泛型 2020-4-18 java IO流 2020-4-19 java 网络编程 2020-4-...
Java学习笔记:JavaSe、Spring、JVM、MySQL、MyBatis...