Java代码创建对象的六种方法分享

乔欣 Java经验 发布时间:2023-03-13 21:16:47 阅读数:10387 1
下文笔者讲述java代码创建对象的六中方法分享,如下所示

Java代码创建对象的6种方法


1.使用new关键字
  TestClass p1 = new TestClass();

2.反射之Class类newInstance()
 TestClass p2 = TestClass.class.newInstance();

3.反射之Constructor类的newInstance()
TestClass p3 = TestClass.class.getDeclaredConstructor().newInstance();

4.Object对象的clone方法
 TestClass p4 = (TestClass) p1.clone();
   注意Object类的clone方法是protected
  在Override时,可修改为public
 
5.反序列化
 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"));
 oos.writeObject(p1);
 oos.close();

 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"));
 TestClass p5 = (TestClass) ois.readObject();
 ois.close();

 TestClass类必须要实现Serializable接口
 
 6.使用Unsafe类
  Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
  Unsafe unsafe = (Unsafe) f.get(null);
  TestClass p6 = (TestClass) unsafe.allocateInstance(TestClass.class);
package com.java265.basic;


import sun.misc.Unsafe;

import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class CreateObject {

    public static class TestClass implements Cloneable, Serializable {
        public TestClass(){
            System.out.println("Constructor called");
        }
        @Override
        public Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }

    public static void main(String[] args) 
	    throws IllegalAccessException, InstantiationException, 
		       NoSuchMethodException, InvocationTargetException,
			    CloneNotSupportedException, IOException,
				ClassNotFoundException, NoSuchFieldException {

        System.out.println("---start---");
        System.out.println("(1) new");
        TestClass p1 = new TestClass();

        System.out.println("(2) Class newInstance");
        TestClass p2 = TestClass.class.newInstance();

        System.out.println("(3) Constructor newInstance");
        TestClass p3 = TestClass.class.getDeclaredConstructor().newInstance();

        System.out.println("(4) clone");
        TestClass p4 = (TestClass) p1.clone();

        System.out.println("(5)Serialization");
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("testclass.bin"));
        oos.writeObject(p1);
        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("testclass.bin"));
        TestClass p5 = (TestClass) ois.readObject();
        ois.close();

        System.out.println("(6) Unsafe");
        Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
        Unsafe unsafe = (Unsafe) f.get(null);
        TestClass p6 = (TestClass) unsafe.allocateInstance(TestClass.class);

        System.out.println("---end---");
    }
}

-----运行以上代码,将输出以下信息------
---start---
(1) new
Constructor called
(2) Class newInstance
Constructor called
(3) Constructor newInstance
Constructor called
(4) clone
(5)Serialization
(6) Unsafe
---end---
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202303/16787134426028.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者