一)对象实例化常用方式
方式一:直接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();}
}
识别二维码关注个人微信公众号

本章完结,待续、欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!













