一、java 实例化几种方式
1、用new语句创建对象,这是最常见的创建对象的方法。
2、使用Class静态方法 Class.forName 方法
3、使用 .loadClass() 方法
4、使用Constructor类的newInstance方法
运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。如:Object obj = Class.forName("java.lang.Object").newInstance();
5、调用对象的clone()方法。
无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法
6、使用反序列化。
通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
二、代码
Person 类
class Person {
private String name;
private int age;
public Person( String name,int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name){
this.name =name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名是:"+name+"; 年龄是:"+age;
}
}
1、new 的方式实例化
Person p1 = new Person("王豪博",25);
System.out.println(p1.tostring())
2、使用Class静态方法 Class.forName 方法 (再调 newInstance方法 )
Person emp2 = (Person) Class.forName("org.pro.com.Person").newInstance();
或者
Persone emp2 = Person.class.newInstance();
3、class.loadClass 方法
ClassLoader cl; // 如何获得ClassLoader参考1.6
Class cls = cl.loadClass("com.rain.B"); // 使用第一步得到的ClassLoader来载入B
B b = (B)cls.newInstance(); // 有B的类得到一个B的实例
4、和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。
Constructor constructor = Person .class.getConstructor();
Person emp3 = constructor.newInstance();
5、使用 clone
class Person implements Cloneable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "姓名是:" + name + "; 年龄是:" + age;
}
}
测试
public static void main(String[] args) {
Person p1 = new Person("Jone", 25);
Person p2 = null;
try {
p2 = (Person) p1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
p2.setName("Ken");
p2.setAge(24);
System.out.println(p2);
}
6、使用反序列化
import java.io.*;
import java.util.Date;
public class ObjectSaver {
public static void main(String[] args) throws Exception {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:/objectFile.swf"));
//序列化对象
Customer customer = new Customer("haobo", 24);
out.writeObject("你好!");
out.writeObject(new Date());
out.writeObject(customer);
out.writeInt(123); //写入基本类型数据
out.close();
//反序列化对象
ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:/objectFile.swf"));
System.out.println("obj1=" + (String) in.readObject());
System.out.println("obj2=" + (Date) in.readObject());
Customer obj3 = (Customer) in.readObject();
System.out.println("obj3=" + obj3);
int obj4 = in.readInt();
System.out.println("obj4=" + obj4);
in.close();
}
}
class Customer implements Serializable {
/**
*
*/
private static final long serialVersionUID = -88175599799432325L;
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "name=" + name + ", age=" + age;
}
}
--------------------------------------
https://blog.csdn.net/u012524415/article/details/80327705