1. 类的初始化
类中的初始化顺序是由类中变量定义位置所决定的;变量的初始化在任何方法调用之前发生(包括构造方法)。
public class MethodInit2
{
int i = f();
int j = g(i);
int f(){ return 11;}
int g(int n){ return n*10;}
}
But you can't do this:
public class MethodInit3
{
int j = g(i); //Illegal forward reference
int i = f();
int f(){ return 11;}
int g(int n){retunr n*10;}
}
2. 静态数据初始化
静态数据在内存中只存储一份,不管多少个相关对象被创建。不能把static关键字作用于局部变量,只能作用于成员变量。
如果是基本类型静态变量(boolean,byte,short,char,int,long,float,double)没有显式初始化,则被初始化为该类型默认值;如果是饮用类型变量未被显式初始化,则被初始化为null。
3. 非静态数据初始化
按照顺序:先初始化静态变量和静态代码块;然后非静态变量和代码块;然后是构造函数。
package com.fqyuan.thinking;
public class TestMemory {
public static void main(String[] args) { // Line 1
int i = 1; // Line 2
Object obj = new Object(); // Line 3
TestMemory mem = new TestMemory(); // Line 4
mem.foo(obj); // Line 5
} // Line 9
private void foo(Object param) { // Line 6
String str = param.toString(); // Line 7
System.out.println(str);
} // Line 8
}
运行结果:
age is: 1
Age's age is: 22
Initialization Demo!
4. 数组初始化
数组是固定数量同一类型数据的集合。
如果是基本数据类型,则未显式初始化则被初始化为对应的默认类型。
如果是引用类型数据,则未被显式初始化的将被初始化为null。