java 创建对象的五种方式

2017-03-22 13:55:53   最后更新: 2017-03-22 13:55:53   访问数量:222




作为 java 开发者,创建对象是一件最常见的事,那么,除了使用 new 来创建对象,你知道还有哪些创建对象的方式吗?怎样通过一个 Class 对象获得他的实例呢?

本节我们就来介绍一下 java 对象创建的五种方式

 

MyObject myObj = new MyObject();

 

 

这是最简单也是最常见的对象创建方式,他是通过调用调用指定构造方法进行对象的创建的,可以调用任何构造方法

 

很多情况下,我们需要通过已有的 Class 对象创建对应的实例,这在代理、反射等情况下非常常见

Class 对象拥有 newInstance 方法,他等同于调用对应类的无参构造方法创建对象,因此这种方式最大的局限也在于被实例化的类必须具有无参构造方法,当然这样做的一个好处是,我们可以调用类的无参 private 构造方法创建对象,这是用 new 关键字无法做到的

 

通过 Class 对象的 getConstructor 可以获取 java.lang.reflect.Constructor 对象

Constructor 对象用来描述类的构造方法,通过给 getConstructor 方法传入不同的 Class 对象,可以获取到对应的无参或有参数的构造方法

通过 Constructor 的 newInstance 方法我们就可以实例化对应的类了,但是被实例化的类必须具有对应的构造方法,并且参数必须都是类类型,而不是基本类型

 

/** * 2017/3/12. * Created by techlog */ public class Wall { private Wall() { System.out.println("Here is Wall()"); } public Wall(Integer a) { System.out.println("Here is Wall(" + a + ")"); } public static void main(String[] argv) throws NoSuchMethodException { try { Class<?> classObj = Wall.class; Constructor<?> constructor = classObj.getConstructor(Integer.class); constructor.newInstance(5); } catch (Exception e) { e.printStackTrace(); } } }

 

 

java 中,所有的对象都具有 clone 方法,一旦该方法被调用,jvm 会创建一个新的对象,并且会拷贝原对象中的所有字段,但不会调用任何构造方法

 

对于实现了 Serializable 接口的类,他就可以被 IO 流序列化,当通过反序列化被还原时,我们就可以重新得到这个类的对象,这也是一个创建对象的过程,但他和 clone 方法一样是由 jvm 实现的,他不会调用任何构造方法

 

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj")); Employee emp5 = (Employee) in.readObject();

 

 

Java中创建对象的5种方式 -- http://www.cnblogs.com/wxd0108/p/5685817.html

 






技术帖      技术分享      class      java      反射      面向对象      oop      对象      object      代理      proxy      reflect      new     


1#yunyu: (回复)2017-08-17 23:16:16

UnSafe类也可以创建对象,不过不推荐使用。。。。

京ICP备15018585号