博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java对象实例化的方式
阅读量:5952 次
发布时间:2019-06-19

本文共 3758 字,大约阅读时间需要 12 分钟。

java对象实例化的方式有以下几种:

1、使用new
2、工厂模式
3、反射
4、clone()方法
5、反序列化方式

/**

  • 实现Cloneable和Serializable接口
  • */

    public class Book implements Cloneable, Serializable {
    private static final long serialVersionUID = 1L;

    private Integer serialNum; // 序列号

    private String name; // 图书名称

    public Book() {

    System.out.println("默认构造函数");
    }

    public Book(Integer serialNum, String name) {

    System.out.println("带参数构造函数");
    this.serialNum = serialNum;
    this.name = name;
    }

    public int getSerialNum() {

    return serialNum;
    }
    public void setSerialNum(int serialNum) {
    this.serialNum = serialNum;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }

    @Override

    public String toString() {
    if (name == null) {
    return "书籍属性还未填写";
    }

    return serialNum + " : " + name;

    }

    @Override

    protected Object clone() throws CloneNotSupportedException {
    return super.clone();
    }
    }

class BookFactory {

public static Book getInstance(Integer serialNum, String name) {
return new Book(serialNum, name);
}
}

public class Instantiation {

// 1.通过new实例化对象public static Book newMode() {    System.out.println("============================================================");    System.out.println("通过new实例化对象");    Book book = new Book(1, "大道扬帆");    return book;}// 2.通过工厂方式实例化对象,其本质还是new,但将实例化的细节交给了工厂来处理,屏蔽了和业务代码无关的功能,一定程度上实现了和业务代码的解耦public static Book factoryMode() {    System.out.println("============================================================");    System.out.println("通过工厂方式实例化对象");    return BookFactory.getInstance(2, "大道扬帆");}// 3.通过反射方式实例化对象@SuppressWarnings("rawtypes")public static Book reflectMode() throws Exception {    System.out.println("============================================================");    System.out.println("通过反射方式实例化对象");    Class[] parameterTypes = new Class[] {Integer.class, String.class};    Constructor constructor = Book.class.getConstructor(parameterTypes);    Book book = (Book) constructor.newInstance(3, "大道扬帆");    return book;}// 3-1.通过反射方式实例化对象还有一种方式,但本质上其实和上面的一样,但需要类本身有无参构造函数public static Book reflectAnotherMode() throws Exception {    System.out.println("============================================================");    System.out.println("通过反射方式实例化对象的另外一种方式");    Book book = (Book) Class.forName("instantiation.Book").newInstance();    return book;}// 4.调用已存在对象的clone()方法实例化对象public static Book cloneMode(Book book) throws Exception {    System.out.println("============================================================");    System.out.println("调用已存在对象的clone()方法实例化对象");    Book newBook = (Book) book.clone();    System.out.println("原对象和克隆对象是同一个对象吗?" + (book == newBook));    return newBook;}// 5.对象序列化后可以通过反序列化创建对象public static Book unSerializedMode() throws Exception {    System.out.println("============================================================");    System.out.println("对象序列化后可以通过反序列化创建对象");    Book book = new Book(5, "大道扬帆");    ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("D:/book.obj")));    objectOutputStream.writeObject(book);    ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("D:/book.obj")));    Book newBook = (Book) objectInputStream.readObject();    System.out.println("原对象和反序列化的对象是同一个吗?" + (book == newBook));    return newBook;}public static void main(String[] args) throws Exception {    System.out.println(Instantiation.newMode());    System.out.println(Instantiation.factoryMode());    System.out.println(Instantiation.reflectMode());    System.out.println(Instantiation.reflectAnotherMode());    Book book = new Book(4, "大道扬帆");    System.out.println(Instantiation.cloneMode(book));    System.out.println(Instantiation.unSerializedMode());}

}

看精彩玄幻世界,尽在《大道扬帆》

转载于:https://blog.51cto.com/13855604/2170171

你可能感兴趣的文章
利用POI 技术动态替换word模板内容
查看>>
基于 Android NDK 的学习之旅-----资源释放
查看>>
大数据之Oozie——源码分析(一)程序入口
查看>>
SpringMVC工作原理
查看>>
浅谈ThreadPool 线程池
查看>>
Mybatis传多个参数(三种解决方案)
查看>>
c3p0三种配置方式(automaticTestTable)
查看>>
VS一直停留在“正在还原nuget程序包”
查看>>
HTTP1.1中CHUNKED编码解析
查看>>
对字符串进行加密解密
查看>>
jmx相关资料
查看>>
eclipse 打包 apk 文件
查看>>
BZOJ 1180: [CROATIAN2009]OTOCI [LCT]
查看>>
doT.js灵活运用之嵌入使用
查看>>
CentOS7--Firewalld防火墙
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>
协同过滤及大数据处理
查看>>
Java8 本地DateTime API
查看>>