1简介Java是一门面向对象的编程语言,只要用到它,就需要创建对象。Java中创建对象的方式有六种,但是真正常用的并没有那么多,所以这里记录一下吧。2六种方法(1)使用new关键字Pumpkinp1=newPumpkin();(2)反射类classnewInstance()Pumpkinp2=Pumpkin.class.newInstance();(3)反射构造类newInstance()Pumpkinp3=Pumpkin.class.getDeclaredConstructor().newInstance();(4)Object对象Pumpkin的clone方法p4=(Pumpkin)p1.clone();注意Object类的clone方法是protected的,当Override时,可以改成public,这样其他类都可以调用。在这里,小编建了一个前端学习交流按钮群:132667127,自己整理的最新前端资料和进阶开发教程。喜欢的话可以加群一起学习交流,注意浅拷贝和深拷贝。(5)反序列化ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("object.bin"));oos.writeObject(p1);oos.close();ObjectInputStreamois=newObjectInputStream(newFileInputStream("object.bin"));Pumpkinp5=(Pumpkin)ois.readObject();ois.close();必须实现序列化接口;需要注意哪些字段可以序列化,哪些字段不序列化,如何控制;注意serialVersionUID的作用;了解Externalizable的区别。(6)使用Unsafe类Fieldf=Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);Unsafeunsafe=(Unsafe)f.get(null);Pumpkinp6=(Pumpkin)unsafe.allocateInstance(南瓜类);很少用到的方法,一般不需要了解这个方法。3示例代码示例代码如下:packagecom.pkslow.basic;importsun.misc.Unsafe;importjava.io.*;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;publicclassCreateObject{publicstaticclassPumpkinimplementsCloneable,Serializable{publicPumpkin(){System.out.println("Constructorcalled");}@OverridepublicObjectclone()抛出CloneNotSupportedException{returnsuper.clone();}}publicstaticvoidmain(String[]args)抛出IllegalAccessException、InstantiationException、NoSuchMethodException、InvocationTargetException、CloneNotSupportedException、IOException、ClassNotFoundException、NoSuchFieldException{System.out.println("---start---");System.out.println("(1)new");南瓜p1=新南瓜();System.out.println("(2)ClassnewInstance");南瓜p2=Pumpkin.class.newInstance();System.out.println("(3)构造函数uctornewInstance");Pumpkinp3=Pumpkin.class.getDeclaredConstructor().newInstance();System.out.println("(4)clone");Pumpkinp4=(Pumpkin)p1.clone();System.out.println("(5)Serialization");ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("object.bin"));oos.writeObject(p1);oos.close();ObjectInputStreamois=newObjectInputStream(newFileInputStream("object.bin"));Pumpkinp5=(Pumpkin)ois.readObject();ois.close();System.out.println("(6)Unsafe");Fieldf=Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);Unsafeunsafe=(Unsafe)f.get(null);Pumpkinp6=(Pumpkin)unsafe.allocateInstance(Pumpkin.class);System.out.println("---end---");}}输出结果如下:---start---(1)newConstructorcalled(2)ClassnewInstanceConstructorcalled(3)ConstructornewInstanceConstructorcalled(4)clone(5)Serialization(6)Unsafe---end---所以可以执行构造函数的有:new关键字,两种反射;不会执行构造函数的有:clone,serialization,Unsafeclass4总结一下,学会生产对象,还要学会管理对象和回收对象。
