Java创建对象的五种方式

1.通过new xxx()调用构造方法创建对象
2.通过反射创建对象
3.通过反射,调用construct.newInstance()创建对象
4.通过xxx.clone()克隆的方式创建对象
5.通过序列化、反序列化创建对象

public class TestCreateObject {

    //1.通过new xxx()调用构造方法创建对象
    private static Student creatNewStudent(){
        return new Student(UUID.randomUUID().toString(),"丁强");
    }
    //2.通过反射创建对象
    private static Student createClassStudent(){
        try {
            Student student = Student.class.newInstance();
            //得到一个空的对象
            student.setId(UUID.randomUUID().toString());
            student.setName("雷超");
            return student;
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
    //3.通过反射,调用construct.newInstance()创建对象
    private static Student createConstructStudent(){
        //获取Student类对应的CLASS字节码对象
        Class<Student> studentClass = Student.class;
        //获取Student类中有参构造方法
        try {
            Constructor<Student> constructor = studentClass.getConstructor(String.class,String.class);
            return constructor.newInstance(UUID.randomUUID().toString(),"马申");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
    //4.通过xxx.clone()克隆的方式创建对象
    private static Student createCloneStudent(){
        Student studentOne = new Student(UUID.randomUUID().toString(),"吴雨");
        try {
            return (Student) studentOne.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
    //5.通过序列化、反序列化创建对象
    private static Student createSerializableStudent(){
        Student student = new Student(UUID.randomUUID().toString(),"李四");
        //将student对象序列化到student.txt文件中
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\student.txt"));
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("G:\\student.txt"));
            oos.writeObject(student);
            //从student.txt文件中反序列化出student对象
            return (Student) ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        System.out.println("第一种方法"+creatNewStudent());
        System.out.println("第二种方法"+createClassStudent());
        System.out.println("第三种方法"+createConstructStudent());
        System.out.println("第四种方法"+createCloneStudent());
        System.out.println("第五种方法"+createSerializableStudent());
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daring!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值