new一个对象
用关键字new
进行对象的创建,几乎是写代码时最常用的操作之一了,比如:
Database database1 = new Database();
Database database2 = new Database( "database", 26, 65.0f );
通过new
的方式可以调用类的无参
或者有参
构造方法来实例化出一个对象。
new
一个对象的具体流程,用一张图可大致描述成如下所示:
- 首先,当
new
一个对象时,比如Database database1 = new Database();
,JVM首先就会去检查Database
这个符号引用所代表的类是否已经被加载过,如果没有就要执行对应类的加载过程; - 声明类型引用很简单,比如
Database database1 = new Database();
就会声明一个Database
类型的引用database1
; - 第一步类加载完成后,对象所需的内存大小就已经确定了,接下来JVM就会在堆上为对象分配内存;
- 属性“0”值初始化,即为实例化对象的各个属性赋上默认初始化“0”值,比如
int
的初始化0值就是0,而一个对象的初始化0值就是null
; - 接下来JVM会进行对象头的设置,这里面就主要包括对象的运行时数据(比如Hash码、分代年龄、锁状态标志、锁指针、偏向线程ID、偏向时间戳等)以及类型指针(JVM通过该类型指针来确定该对象是哪个类的实例);
- 属性的显示初始化也好理解,比如定义一个类的时候,针对某个属性字段手动的赋值,如:
private String name = "database";
就在这时候给初始化上; - 最后是调用类的构造方法来进行进行构造方法内描述的初始化动作。