java实例化的4种方式

java实例化有4种方式:
一、用new语句创建对象,这是最常用的创建对象方式。
二、运用反射手段,调用java.lang…Class或者java.lang.reflect.Constructor类的newInstance实例化方法。
三、调用对象的clone方法。
四、运用反序列化机制。


一、new语句创建对象

User user = new User();

二、利用反射机制

根据依赖倒转原则,实际编码过程中主要针对接口编程而不是具体类数据。在面向接口编程模式,经常调用该方法创建实例。

例如XML配置文件中,获取具体子类的类名称字符串subCLassName,然后根据获得类名字符串进行实例化。

Class c = Class.foName(subClassName);

1、java.lang.Class.newInstance()

User user = (User) c.newInstance();	//不带有任何参数

2、java.lang.reflect.Constructor类的newInstance()

Constructor con = c.getConstructor(String.class);
User user = (User) con.newInstance("name");

public Object getNewObject(String className) trows Exception {
	Class tClass = Class.forName(className);
	Object tObject = tClass.newInstance();
	return tObject;
}

三、调用对象的clone方法

User user1 = new User(1, "mac");
User user2 = null;
user2 = (User) user1.clone();

四、运用反序列化手段

序列化: 把对象状态转化位可保持或者传输的格式过程,被序列化的对象必须implments Serializable;
反序列化: 把流转换为对象的过程。

当两个进程在进行远程传输过程中时,彼此可以发送各种类型的数据,无论是哪种数据类型,都会以二进制序列的形式在网络上传送,发送方需要把这个java对象转换为字节序列,才可以在网络上传送,也就是序列化的过程。

序列化和反序列化

package serial_external;

import org.junit.Test;

import java.io.*;

/**
 * @author mac
 */
public class SerializableTest {
    public static void main(String[] args) {

    }

    @Test
    public void test() throws IOException {
        A a = new A();
        a.i = 1;
        a.s = "a";
        FileOutputStream fileOutputStream = null;
        FileInputStream fileInputStream = null;
        try {
            //obj 写入文件
            fileOutputStream = new FileOutputStream("temp");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(a);
            fileOutputStream.close();
            //通过文件读取obj
            fileInputStream = new FileInputStream("temp");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            A a2 = (A) objectInputStream.readObject();
            fileInputStream.close();
            System.out.println(a2.i);
            System.out.println(a2.s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class A implements Serializable {
    int i;
    String s;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值