1、使用new關鍵字
最常見的創建對象的方式。
通過有參的構造器可以給屬性賦值。
class Person{
Sting name;
int age;
public Person(){}//無參構造器
public Person(String name, int age){//帶參構造器
this.name = name;
this.age = age;
}
}
class Test{
public static void main(String[] args){
Person p = new Person("Tom", 12);//調用有參構造器
Person p1 = new Person();//調用無參構造器
}
}
2、使用Constructor類的newInstance()
publicclass Person{
private String name;
public Person() {}
public static void main(String[] args) throws Exception {
Constructor<Person> constructor = Person.class.getConstructor();
Person p = constructor.newInstance();
}
}
3、使用object的clone()
記得實現Cloneable 接口
class Student implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return (Student) super.clone();
}
public static void main(String[] args) {
Student stu = new Student();
Student stuClone = Student .clone();
}
}
4、使用Class類的newInstance()
class Person{
private String name;
public Person() {}
public static void main(String[] args) throws Exception {
//第一種方法
Person p= (Person ) Class.forName("other.Person").newInstance();
System.out.println(p);
//第二種方法
p= Person.class.newInstance();
}
}
5、使用反序列化
class Person implements Serializable {
private String name;
public Person() {}
public static void main(String[] args) throws Exception {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("Person.java"));
Person emp5 = (Person) in.readObject();
}
}
總結:創建對象的五種方式
- 用new語句創建對象,這是最常見的創建對象的方法。
- 運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的- - newInstance()實例方法。
- 調用對象的clone()方法。
- 通過I/O流(包括反序列化),
注:前兩種會調用構造函數,而後兩種不會調用構造函數。