Java对象有哪些创建的方式?
对象除了new创建以外还有什么方式吗?有人知道反射也能创建对象,这里我分为四种方式
- new 关键字创建
- Class 反射方式创建
- 已有对象创建
- 序列化创建
我先创建一个类,方便说明下面的代码
public class Student implements Serializable,Cloneable{
public Student(){
super();
}
@Override
protected Student clone() throws CloneNotSupportedException {
return (Student) super.clone();
}
}
- new 关键字创建
Student student = new Student();
这个没什么好说的,稍微注意一点的是:
这种方式也是新建一个对象,但是没用用到new,这里主要是常量池和自动装箱的知识,不了解的可以去自动搜索。
String str="new instance";
- 反射创建
这种比较基础,大家都写的来
Student student = Student.class.newInstance();
构造器创建,注意我们如果没有写构造方法,默认上面那条。
//默认空参构造器构造
Student student = Student.class.getConstructor().newInstance();
//指定构造器构造
Student student1=Student.class.getConstructor(int.class).newInstance(1);
- 通过已有的对象创建
Java中很多对象提供copy之类的方法,但是底层大多都是调动new关键字创建,比如String.substring(m,n);底层调用了new String(char[] chars);
我这里指定是非new创建的,Java提供了一种深拷贝的方式,也就是clone,基本格式就是最上面我写类的地方,注意!clone方法有可能会抛出异常,需要处理。
Student student = new Student();
Student clone = student.clone();
- 序列化创建
实际上,就是把已经创建好的类持久化到本地,然后再读取,这个过程也属于常见类的方式,注意异常处理,别忘了类实现Serializable接口
Student student = (Student) new ObjectInputStream(new
FileInputStream("file.txt")).readObject();
- 总结,以上就是Java创建对象的4种方式,如果有问题欢迎补充。