Java中创建对象的5种方式
2017-12-28 10:50
267 查看
Java中有5种创建对象的方式:
1. 这个类已经加载
2. 这个类已经连接了
其实以上两点其实是对new创建对象的分解,我们可以在调用class的静态加载方法forName时获得更好的灵活性。但从对构造函数抛出的异常处理来说,Class.newInstance不做处理直接抛出。newInstance()是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择。
方式 | 是否调用构造方法 |
---|---|
使用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中创建对象的5种方式
- Java中有5种创建对象的方式
- java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式 – 码农网 http://www.codeceo.com/article/5-ways-java-create-object.html
- Java 5种创建对象的方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别
- java创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式
- Java中创建对象的5种方式