背景
面试的时候有些面试官喜欢问这些, 这里简单记录一下.
常见方式
方式1: new XXXX();
- 使用
new
关键字:这是最常见的创建对象的方式,使用new
关键字后面跟上类名和参数列表(如果有),可以调用类的构造方法来创建对象。例如:
MyClass obj = new MyClass(); // 使用new关键字创建MyClass类的对象
方式2: 反射获取Class, 调用 newInstance()
- 使用反射:Java的反射机制允许在运行时动态地创建对象。通过使用
Class
类的newInstance()
方法或Constructor
类的newInstance()
方法,可以通过类的全限定名或构造方法来创建对象。例如:
Class<?> cls = MyClass.class;
MyClass obj = (MyClass) cls.newInstance(); // 使用反射创建MyClass类的对象
方式3: 调用 clone() 方法
- 使用
clone()
方法:通过实现Cloneable
接口并重写clone()
方法,可以创建对象的副本。使用clone()
方法可以复制一个已存在对象的完全相同的副本。例如:
MyClass obj1 = new MyClass();
MyClass obj2 = obj1.clone(); // 使用clone()方法创建MyClass类的对象
方式4: 调用工厂的 create() 方法
- 使用工厂方法:工厂方法是一种创建对象的设计模式,它将对象的创建委托给一个工厂类,通过调用工厂类中的静态方法来创建对象。例如:
MyClass obj = MyClassFactory.create(); // 使用工厂方法创建MyClass类的对象
方式5: 序列化与反序列化
- 使用序列化和反序列化:通过实现
Serializable
接口,可以将对象转化为字节序列并存储在文件或网络中,然后再将其反序列化为对象。使用Java的序列化和反序列化机制可以创建对象的副本。例如:
MyClass obj1 = new MyClass();
// 将对象序列化到文件
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("obj.dat"));
out.writeObject(obj1);
out.close();
// 从文件反序列化为对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("obj.dat"));
MyClass obj2 = (MyClass) in.readObject();
in.close();
总结
这些是常见的创建对象的方式,每种方式都有其适用的场景。您可以根据具体的需求选择合适的方式来创建对象。