A a = new A();
new 创建对象过程:
1.类加载
代码验证
2.给对象在内存(堆)中分配空间(给属性赋值);
3.属性赋默认值;
byte,short.int,long ->0
float ->0.0f
double ->0.0
boolean ->false
String ->null
char ->'u0000'
4.给属性赋初始值;(用等号‘=’)
5.调用构造方法(方法和类名相同,没有返回类型)
6.将对象在堆区中的首地址返回给引用a
/*
* Java类实例化的初始化过程.
* 执行顺序:
* (静态变量->静态初始化块)->main->(实例变量->实例初始化块)->构造器
*/
public class NewInstanceTest1
{
public static void main(String[] args)
{
System.out.println("main");
System.out.println("---111---");
new NewInstanceTest1();
System.out.println("---222---");
new NewInstanceTest1();
}
private static int i = 1;
public static String sStr = "静态变量";
public String iStr = "实例变量";
{
// 实例初始化块
System.out.println("进入实例初始化块");
System.out.println("实例初始化块中调用变量:" + iStr);
System.out.print("实例初始化块中调用方法:");
iTalk();
}
static
{
// 静态初始化块
System.out.println("进入静态初始化块");
System.out.println("静态初始化块中调用变量:" + sStr);
System.out.print("静态初始化块中调用方法:");
sTalk();
}
public static void sTalk()
{
// 静态方法
System.out.println("静态方法" + "/静态变量值" + (++i));
}
public void iTalk()
{
// 实例方法
System.out.println("实例方法");
}
public NewInstanceTest1()
{
// 构造器
System.out.println("构造器");
}
}
// 输出结果:
进入静态初始化块
静态初始化块中调用变量:静态变量
静态初始化块中调用方法:静态方法/静态变量值2
main
---111---
进入实例初始化块
实例初始化块中调用变量:实例变量
实例初始化块中调用方法:实例方法
构造器
---222---
进入实例初始化块
实例初始化块中调用变量:实例变量
实例初始化块中调用方法:实例方法
构造器