您的位置:首页 > 编程语言 > Java开发

Java中创建对象的5种方式

2017-12-28 10:50 267 查看
Java中有5种创建对象的方式:

方式是否调用构造方法
使用new关键字调用了构造函数
使用Class类的newInstance方法调用了构造函数
使用Constructor类的newInstance方法调用了构造函数
使用clone方法没有调用构造函数
使用反序列化没有调用构造函数

1.new 关键字

通过new创建的对象可以调用任意的构造函数(无论有参还是无参),在使用new创建对象时,这个类可以没有被加载。new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。

2.newInstance方法

newInstance可以调用类的无参构造函数。从jvm来看,在使用newInstance时必须保证以下两点:

1. 这个类已经加载

2. 这个类已经连接了

其实以上两点其实是对new创建对象的分解,我们可以在调用class的静态加载方法forName时获得更好的灵活性。但从对构造函数抛出的异常处理来说,Class.newInstance不做处理直接抛出。newInstance()是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择。

3.Constructor类的newInstance方法

java.lang.reflect.Constructor类的newInstance方法创建的对象可以调用有参数和私有构造函数。从对构造函数抛出的异常处理来说,Constructor.newInstance会对构造函数抛出的异常进行处理,统一抛出InvocationTargetException异常。

4.clone方法

当调用一个对象的clone方法,jvm会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。

5.使用反序列化

当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现Serializable接口或Parcelable接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象 java