java类实例化的4种方式

  • 使用new直接创建
  • 使用java反射创建
  • 调用clone()方法,进行实例的拷贝
  • 通过反序列化类获取

使用new直接创建

Test t = new Test();

使用java反射创建

1、获取Class对象的三种方式

  • 公有属性class
    Class<?> clazz = Test.class;
  • 方法getClass()
    Test t = new Test();
    Class<?> clazz = t.getClass();
  • Class.forName()
    Class<?> clazz = Class.forName("com.xx.Test");

2、通过反射实例化对象的两种方式

  • Class.newInstance()
Class<?> clazz = Class.forName("com.xx.Test");
Test t = (Test) clazz.newInstance();
  • Constructor.newInstance()
Constructor[] constructor = Test.class.getConstructors();
Test t = (Test) constructor[0].newInstance(null);

备注说明:枚举类型不支持反射来实现,因此java推荐使用enum实现单例模式

 if ((clazz.getModifiers() & Modifier.ENUM) != 0)
            throw new IllegalArgumentException("Cannot reflectively create enum objects");

调用clone()方法,进行实例的拷贝

Test t = new Test();
Test t2 = (Test) t.clone();

通过反序列化类获取

通过ObjectInputStream的readObject()的方法

posted on 2021-05-18 21:00  乡野少年  阅读(1456)  评论(0编辑  收藏  举报