一)对象实例化常用方式
方式一:直接new一个对象,最常用的一种。
方式二:反射,通过Class.forName("类的全限定名")。
方式三:构造器,通过Class.forName("类的全限定名"),再获取构造方法。
方式四:序列化,通过java.io.ObjectInputStream对象流的方式。
备注:工厂模式实例化、克隆实例化两种比较少用。
二)new一个对象
声明一个对象
public class NewObject {
/** 测试方法 */
public void print() {
System.out.println("NewObject print-------");
}
}
实例化
NewObject newObject = new NewObject();
newObject.print();
三)反射
声明一个对象
public class NewObject {
/** 测试方法 */
public void print() {
System.out.println("NewObject print-------");
}
}
实例化
Class<?> cla = Class.forName("com.oysept.instance.NewObject"); // 包名+类名
NewObject newObject = (NewObject) cla.newInstance(); // 实例化
newObject.print(); // 调用测试方法
四)构造器
声明一个对象
public class NewObject {
public NewObject() {
System.out.println("构造器1-------");
}
public NewObject(Object str) {
System.out.println("构造器2-------");
}
public NewObject(String str, Integer s) {
System.out.println("构造器3-------");
}
/** 测试方法 */
public void print() {
System.out.println("NewObject print-------");
}
}
场景一:无参构造方法
Class<?> cla = Class.forName("com.oysept.instance.NewObject"); // 包名+类名
// 场景一: 无参构造方法
Constructor<?> constructor = cla.getConstructor(); // 构造器
NewObject newObject = (NewObject) constructor.newInstance(); // 获取无参构造方法实例
newObject.print(); // 调用测试方法
场景二:带Object参数的构造方法
Class<?> cla = Class.forName("com.oysept.instance.NewObject"); // 包名+类名
// 场景二: 带Object参数的构造方法
Constructor<?> constructor = cla.getConstructor(Object.class);
NewObject newObject = (NewObject) constructor.newInstance("Object");
newObject.print(); // 调用测试方法
场景三: 带String和Integer参数的构造方法
Class<?> cla = Class.forName("com.oysept.instance.NewObject"); // 包名+类名
// 场景三: 带String和Integer参数的构造方法
Constructor<?> constructor = cla.getConstructor(String.class, Integer.class);
NewObject newObject = (NewObject) constructor.newInstance("String", 0);
newObject.print(); // 调用测试方法
五)序列化
声明一个对象,必须继承java.io.Serializable接口,才能序列化
import java.io.Serializable;
public class NewObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/** 测试方法 */
public void print() {
System.out.println("NewObject print-------");
}
}
序列化方法
/** 序列化 */
public static void serializable(Object obj, String file) {
ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File(file)));
objectOutputStream.writeObject(new NewObject());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (objectOutputStream != null) {
objectOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
反序列化方法
/** 反序列化 */
public static Object unSerializable(String file) {
Object obj = null;
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream(new File(file)));
obj = objectInputStream.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (objectInputStream != null) {
objectInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return obj;
}
序列化实例测试
public static void main(String[] args) {
try {
String file = "D:\\object.object"; // 对象存放地址
// 先序列化
serializable(new NewObject(), file);
// 再反序列化
NewObject new4 = (NewObject) unSerializable(file);
new4.print(); // 调用测试方法
} catch (Exception e) {
e.printStackTrace();
}
}
识别二维码关注个人微信公众号
本章完结,待续、欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!