版权声明
- 本文原创作者:元芳,你怎么看
- 作者的博客地址:https://blog.csdn.net/ewcc_ycl
今天突然被问到对象的创建有几种方式,当时说道三种,结果答案有四种。。。
接下来一起了解一下它吧。
Java创建对象四种方式
- new的方式,也是最常用的方式
- 利用反射,使用Java.lang.Class或者java.lang.reflect.Constructor类的newInstance()方法。
- 克隆,对象的clone()方法
- 反序列化,调用java.io.ObjectInputStream对象的readObject()方法
1.new的方式
public class TestCode {
public static void main(String[] args) {
try {
System.out.println("请输入一个整数:");
//创建键盘接收对象
Scanner scanner=new Scanner(System.in);
int nextInt = scanner.nextInt();
System.out.println("您输入的数为:"+nextInt);
} catch (Exception e) {
System.out.println("格式有误!!!");
}
}
}
2.反射,newInstance方法
public class TestCode {
public static void main(String[] args) {
//获取class对象
Class<?> s1=Class.forName("com.ew.Student");
//java.lang.Class.newInstance()
Student s2=(Student)s1.newInstance();
//java.lang.reflect.Constructor类的newInstance()
//获取构造器
Constructor<?> constructor=s1.getConstructor(String.class,String.class);
//用过构造器创建实例
Student student=(Student) constructor.newInstance("小明","成都");
}
}
3.克隆,被克隆的对象的类实现Cloneable接口,并重写Object类的clone方法
public class TestCode {
public static void main(String[] args) throws CloneNotSupportedException {
Student student=new Student("小明", "成都");
Student student2=null;
student2=(Student) student.clone();
}
}
4.反序列化(对序列化的对象使用),使用java.io.ObjectInputStream对象的readObject()方法,需要实现Serializable接口
package com.ew;
import java.io.Serializable;
public class People implements Serializable {
/**
* 被序列化的people类
*/
private static final long serialVersionUID = -1953708107779433346L;
private String name;
private String contry;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContry() {
return contry;
}
public void setContry(String contry) {
this.contry = contry;
}
@Override
public String toString() {
return "People [name=" + name + ", contry=" + contry + "]";
}
}
package com.ew;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
public class TestSerializable {
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException {
File file=new File("D://object.txt");
People p=(People)readObjectFromFile(file);
System.out.println(p);
}
//读
private static Object readObjectFromFile(File file) throws FileNotFoundException, IOException, ClassNotFoundException
{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
Object obj=ois.readObject();
ois.close();
return obj;
}
}