java 创建对象有哪几种方式
java中提供了以下四种创建对象的方式:
-
new创建新对象
-
通过反射机制
通过反射机制创建对象时,首先通过反射机制加载类获得Class类,获得Class类的方法主要有以下三种:
- Class.forName("类的全路径");
- 类名.Class;
- 实例.getClass();
其次使用newInstance()方法创建该类的对象。
-
采用clone机制
-
通过序列化机制
通过反序列化创建对象
package com.java.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; //Serializable-->标志性接口,表示该类的数据成员可以被序列化 public class People implements Serializable{ public String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public People(){ this.name="Lili"; this.age=18; } public static void main(String[] args){ People p=new People(); ObjectOutputStream oos=null; ObjectInputStream ois=null; try{ FileOutputStream fos=new FileOutputStream("people.txt"); oos=new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); }catch(Exception e){ e.printStackTrace(); } //反序列化 try{ FileInputStream fis=new FileInputStream("people.txt"); ois=new ObjectInputStream(fis); People p1=(People) ois.readObject(); System.out.println("p1和p是同一个对象吗?"+(p1==p)); }catch(Exception e){ e.printStackTrace(); } } } //p1和p是同一个对象吗?false
序列化时首先创建一个输出流对象oos,使用oos的writeObject()方法将p对象写入oos对象中去。使用反序列化创建对象时,首先创建一个输入流对象ois,使用输入流对象ois的readObject()方法将序列化存入的对象读出,重新创建一个对象。
java中提供了以下四种创建对象的方式: new创建新对象 通过反射机制 通过反射机制创建对象时,首先通过反射机制加载类获得Class类,获得Class类的方法主要有以下三种: Class.forName("类的全路径"); 类名.Class; 实例.getClass(); 其次使用newInstance()方法创建该类的对象。 采用clone机制 通过序列化机制 通过反序列化创建对象 package com.java.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; //Serializable-->标志性接口,表示该类的数据成员可以被序列化 public class People implements Serializable{ public String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public People(){ this.name="Lili"; this.age=18; } public static void main(String[] args){ People p=new People(); ObjectOutputStream oos=null; ObjectInputStream ois=null; try{ FileOutputStream fos=new FileOutputStream("people.txt"); oos=new ObjectOutputStream(fos); oos.writeObject(p); oos.close(); }catch(Exception e){ e.printStackTrace(); } //反序列化 try{ FileInputStream fis=new FileInputStream("people.txt"); ois=new ObjectInputStream(fis); People p1=(People) ois.readObject(); System.out.println("p1和p是同一个对象吗?"+(p1==p)); }catch(Exception e){ e.printStackTrace(); } } } //p1和p是同一个对象吗?false 序列化时首先创建一个输出流对象oos,使用oos的writeObject()方法将p对象写入oos对象中去。使用反序列化创建对象时,首先创建一个输入流对象ois,使用输入流对象ois的readObject()方法将序列化存入的对象读出,重新创建一个对象。下一篇:
如何使用CMake进行编译?