Java中创建对象的几种方式
1. 使用new关键字
这是最直接、最常见的创建对象的方式。通过new关键字,Java会调用类的构造函数(Constructor)来初始化新创建的对象。
ClassName obj = new ClassName();
2. 使用clone()方法
如果类实现了Cloneable接口并覆盖了Object类的clone()方法,那么可以通过调用对象的clone()方法来创建该对象的浅拷贝(Shallow Copy)。
补充:深拷贝和浅拷贝的区别
浅拷贝:创建一个新对象,这个对象具有与原对象相同的字段和值。但是,如果对象的某些字段是引用类型(如对象或数组),那么浅拷贝只会复制这些引用,而不是引用指向的实际对象。
深拷贝:创建一个新对象,并递归地复制对象内的所有引用类型。这意味着新对象和原对象不再共享任何数据,即使数据是引用类型。深拷贝会创建一个完全独立的副本,包括所有层次上的引用类型。
public class Main {public static class Person implements Cloneable {// 必须覆盖clone方法@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}}public static void main(String[] args) throws CloneNotSupportedException {Person person = new Person();Person clonePerson = (Person)person.clone();}
}
3. 反射(Reflection)
反射允许程序在运行时检查和修改其结构和行为,包括创建对象。这通常用于框架或需要动态加载类的场景。
public class TestReflection {public static class Person {public String name;public int age;public Person(String name, int age){this.name = name;this.age = age;}@Overridepublic String toString() {System.out.println("name: " + name + ", age: " + age);return null;}}public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Constructor<Person> constructor = Person.class.getConstructor(String.class, int.class);Person obj = constructor.newInstance("yjh",18);obj.toString();}
}
4. 使用反序列化
public class TestSer {public static class Person implements Serializable {public String name;public int age;public Person(String name, int age){this.name = name;this.age = age;}@Overridepublic String toString() {System.out.println("name: " + name + ", age: " + age);return null;}}public static void main(String[] args) throws IOException, ClassNotFoundException {// 序列化Person order = new Person("YJH",18);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Person.obj"));oos.writeObject(order);// 反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Person.obj"));Person obj = (Person) ois.readObject();obj.toString();}
}
注意:其中反射和new会调用类的构造方法。