创建对象的相关知识补充

简介: 创建对象的相关知识补充

创建对象有六种方法:

一,使用new关键字

这个不必多说了,是最常见和最常用的。

二,Class对象的newInstance()方法

Class clazz = Class.forName(className);
Object obj = clazz.newInstance();

三,构造函数对象的newInstance()方法

Constructor constructor = Test.class.getConstructor();
Test test = constructor.newInstance();

四,对象反序列化

就是将一个对象序列化之后,通过反序列化的方式再还原成一个对象。


五,Object对象的clone()方法

clone()方法就是创建一个对象的副本,这个方法可以生成新的对象。


六,使用Unsafe类创建对象

Unsafe类使用起来并不安全,会加大出错的几率,因此官方并不推介使用。

使用反射方式得到Unsafe的对象,再调用allocateInstance(类名.class)可以拿到一个Object对象。


Java对象初始化的步骤:

在博客深入理解Java虚拟机读书笔记(二)–对象的创建与空间分配及定位中,有较为详细的描述,但是篇幅略长,这里做个总结。

步骤一:检查该类型是否已经加载并初始话,没有初始化的话向下一个步骤走。

步骤二:类被正确的加载完以后,在内存中分配空间以用来放置对象。

步骤三:内存分配完成后,将对象中的自己的字段和继承的字段都初始化为对应的零值。

步骤四:设置该对象的对象头,比如该对象是那个类的实现,GC分带信息等。

步骤五:通过构造函数,将字段赋值及其他信息完成,产生一个可用的对象。


再补充一下,类初始话的时候,各个部分的执行顺序。

如果一个类没有继承吉他类,那么初始化的顺序是:

静态变量–>静态代码块–>普通变量–>普通代码块–>构造函数


如果一个类有继承其他父类,那么初始化的顺序是:

父类静态变量–>父类静态代码块–>子类静态变量–>子类静态代码块–>父类普通变量–>父类普通代码块–>父类构造器–>子类普通变量–>子类普通代码块–>子类构造器

目录
相关文章
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
38 3
|
2月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
67 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
49 1
|
7月前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
88 4
|
6月前
|
Java 编译器 数据处理
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
JavaSE——面相对象高级一(4/4)-继承相关的注意事项:权限修饰符、单继承、Object类、方法重写、子类访问成员的特点......
63 0
|
7月前
|
设计模式 算法 编译器
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
72 0
|
编译器 C++
【C++基础(六)】类和对象(中) --构造,析构函数
【C++基础(六)】类和对象(中) --构造,析构函数
|
7月前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
|
C语言 C++
<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
<c++> 类与对象 | 面向对象 | 访问说明符 | 类的声明 | 创建类
104 0
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)