广州网站建设互广,湖南涟钢建设有限公司网站,镇江市建设局网站,免费虚拟主机控制面板面试题经常见到#xff0c;就顺带整理下#xff0c;创建对象的四种方式#xff1a;
1.使用new创建对象
2.使用反射创建对象
3.使用clone创建对象
4.使用序列化反序列化创建对象
代码如下#xff1a;
import java.io.*;
import java.lang.reflect.Constructor;
import…面试题经常见到就顺带整理下创建对象的四种方式
1.使用new创建对象
2.使用反射创建对象
3.使用clone创建对象
4.使用序列化反序列化创建对象
代码如下
import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;/*** Author: zhangximing* Email: 530659058qq.com* Date: 2023/9/11 17:47* Description: 创建对象四种方式*/
public class CreateObject {public static void main(String[] args) throws Exception {//1、new创建对象createByNew();//2、反射创建对象createByReflect(com.zhangximing.springbootinterceptor.object.MyObject);//3、clone创建对象浅复制createByClone();//4、序列化创建对象createBySer();}/*** new创建对象*/public static void createByNew(){MyObject myObject new MyObject();myObject.create(new创建对象);}/*** 反射创建对象* param classPathName* throws Exception*/public static void createByReflect(String classPathName) throws Exception {Class c Class.forName(classPathName);//无参构造方法创建对象Object object c.newInstance();
// //有参构造器创建对象
// Constructor privateCon c.getConstructor(String.class,MyObjectT.class);
// Object object1 privateCon.newInstance(测试,new MyObjectT());//方法一强转为指定对象调用方法MyObject myObject (MyObject) object;String msg 反射创建对象;myObject.create(msg);//方法二指定方法以及参数进行调用Method executeMethod c.getMethod(createT,String.class,Integer.class);Object result executeMethod.invoke(object,msg,1);System.out.println(返回结果result);}/*** clone创建对象注意对应类需要实现Cloneable*/public static void createByClone(){MyObject myObject new MyObject();
// MyObjectT myObjectT new MyObjectT();
// myObjectT.setName(测试1);
// myObject.setMyObjectT(myObjectT);//浅拷贝只拷贝对象本身不拷贝引用对象MyObject myObjectClone (MyObject) myObject.clone();myObjectClone.create(clone创建对象);}/*** 序列化创建对象注意对应类需要实现Serializable* 序列化把Java对象转换为字节序列的过程。* 反序列化把字节序列恢复为Java对象的过程。* throws Exception*/public static void createBySer() throws Exception {File file new File(myObject.txt);//序列化持久化对象ObjectOutputStream out new ObjectOutputStream(new FileOutputStream(file));MyObject myObject new MyObject(测试序列化,new MyObjectT(被引用对象));out.writeObject(myObject);out.close();//反序列化并得到对象ObjectInputStream in new ObjectInputStream(new FileInputStream(file));// 没有强制转换类型Object object in.readObject();in.close();System.out.println(object);}
}import java.io.Serializable;/*** Author: zhangximing* Email: 530659058qq.com* Description: 对象*/
public class MyObject implements Cloneable, Serializable {private String name;private MyObjectT myObjectT;public MyObject(){}public MyObject(String name, MyObjectT myObjectT) {this.name name;this.myObjectT myObjectT;}public String getName() {return name;}public void setName(String name) {this.name name;}public MyObjectT getMyObjectT() {return myObjectT;}public void setMyObjectT(MyObjectT myObjectT) {this.myObjectT myObjectT;}public void create(String msg){System.out.println(msg);}public String createT(String msg,Integer i){return 已处理imsg;}Overridepublic MyObject clone() {//浅拷贝try {MyObject clone (MyObject) super.clone();return clone;} catch (CloneNotSupportedException e) {throw new InternalError(e);}}Overridepublic String toString() {return MyObject{ name name \ , myObjectT myObjectT };}
}import java.io.Serializable;/*** Author: zhangximing* Email: 530659058qq.com* Description: 被引用对象用于验证浅复制*/
public class MyObjectT implements Serializable {private String name;public MyObjectT(){}public MyObjectT(String name){this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString() {return MyObjectT{ name name \ };}
}