Java中生成对象的四种方法

Java中生成对象有四种方法,可以分成两大类,调用构造函数和不调用构造函数。

1. 调用构造函数

1.1 使用 new 关键字 创建对象

这是最简单的方式,也是最常用的方式

String str = new String();

1.2 使用反射技术

Reflection(反射)是动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性和方法。

1.2.1 类的字节码文件

可以通过下面三种方式获取

  • 通过类名获取:类名.class //返回该类的字节码文件,不会加载静态初始化块
  • 通过对象名获取 对象名.getClass(); //返回该对象所对应的类的class对象
  • 通过全限定名获取,Class.forName(“类的全限定名”) //通过加载类取得与该类对应的反射对象
1.2.2 通过反射创建java对象(需要调用构造函数)
  • 得到要创建对象的class对象,用上面提到的三种方式
  • 利用下面两种方式反射对象
  1. 调用无参构造器 ,若是没有,则会报异常
Object o = class.newInstance();  
  1. 有带参数的构造函数的类,先获取到其构造对象, 再通过该构造方法类获取实例:
//获取构造函数类的对象
Constructor constructor = class.getConstructor(String.class,Integer.class); /
// 使用构造器对象的newInstance方法初始化对象
Object obj = constroctor.newInstance(“哈哈”, 20);

2. 不调用构造函数

2.1 调用对象的clone()方法(浅拷贝)

  • 实现clone的类首先需要继承Cloneable接口实质上是一个标识接口,没有任何的接口方法.
  • 被克隆的类要重写 clone()方法.
    要求重写是为了在后续代码中可以很好的使用,比如我们需要深拷贝的时候,有个字段是这个类的实例对象,那么可以直接通过这个对象.clone()方法来进行深拷贝。
  • 调用clone方法

2.2 使用反序列化

使用io流中的对象输入输出流进行。需要实现序列化接口。

try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {

            ObjectName obj = ois.readObject();

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值