java创建对象的方式

java创建对象的方式
  • 1、直接new
  • 2、通过反射clazz的newInstance调用无参构造函数创建对象
  • 3、通过反射获取构造函数直接newInstance创建对象
  • 4、实现Serializable接口,通过反系列化创建对象
  • 5、实现Cloneable接口,覆盖clone方法,通过克隆创建对象
package cn.zlz.createobj;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;

/**
 * 创建对象的方式
 * 1、直接new
 * 2、通过反射clazz的newInstance调用无参构造函数创建对象
 * 3、通过反射获取构造函数直接newInstance创建对象
 * 4、实现Serializable接口,通过反系列化创建对象
 * 5、实现Cloneable接口,覆盖clone方法,通过克隆创建对象
 *
 */
public class Main {

    public static void main(String[] args) {
        // 通过构造函数直接new
        Person person = new Person();
        System.out.println(person);
        // 通过反射创建对象
        createByReflect();
        // 通过构造器反射创建对象
        createByConstructor();
        // 通过序列化创建对象
        createBySerialize();
        //通过克隆创建对象
        createByClone();

    }

    private static void createByClone() {
        Person person = new Person("wangwu",5);
        Person clone = person.clone();
        System.out.println(clone);
    }
    private static void createBySerialize() {
        try {

            String filePath = "person.dat";
            Person instance = new Person("lizi",4);
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(  
                    filePath));  
            objectOutputStream.writeObject(instance);  

            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filePath));
            Person person = (Person) objectInputStream.readObject();
            System.out.println(person);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void createByConstructor() {
        try {
            Class<?> clazz = Class.forName("cn.zlz.createobj.Person");
            Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);
            Person person = (Person) constructor.newInstance("zhangsan", 2);
            System.out.println(person);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void createByReflect() {
        try {
            Class<?> clazz = Class.forName("cn.zlz.createobj.Person");
            Person person = (Person) clazz.newInstance();
            System.out.println(person);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
package cn.zlz.createobj;

import java.io.Serializable;

public class Person implements Serializable, Cloneable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public Person() {
        super();
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }

    @Override
    public Person clone() {
        Person person = null;
        try {
            return (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return person;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值