zoukankan      html  css  js  c++  java
  • 实例化对象的五种方式

    /*
    * 实例化对象的几种方式
    * 1. new
    * 2. 通过工厂方法返回对象
    * 3. 调用对象的clone方法
    * 4. 反射
    * 5. 反序列化
    * */

    直接从第二种开始
     1  /**
     2          * 2工厂
     3          */
     4         String str = String.valueOf(23);
     5         System.out.println(str);
     6         /**
     7          * 3.克隆方法  需要实现Cloneable接口和重写clone方法
     8          */
     9 
    10         Person p = new Person();
    11         p.setName("haha");
    12         p.setAge(11);
    13         Person pClone = (Person) p.clone();
    14         System.out.println(p);
    15         System.out.println(pClone);
    16         /**
    17          * 4.反射
    18          * 反射1.  Class类的newInstance方法,空参构造没有被私有化
    19          */
    20         Class<Person> c = Person.class;
    21         Person p = c.newInstance();
    22         p.setName("zhsangsan");
    23         p.setAge(23);
    24         System.out.println(p);
    25 
    26         //反射2 Class的getConstructor()获取构造器,调用Constructor的newInstance方法  构造方法也不能被私有化
    27         Constructor<Person> constructor = c.getConstructor();
    28         Person p2 = constructor.newInstance();
    29         p2.setName("lisi");
    30         p2.setAge(21);
    31         System.out.println(p2);
    32 
    33         //反射3 构造方法被私有化  多一步,申请访问
    34         Constructor<Person> con = c.getDeclaredConstructor();
    35         con.setAccessible(true);
    36         Person p3 = con.newInstance();
    37         p3.setName("wangwu");
    38         p3.setAge(25);
    39         System.out.println(p3);
    40         /**
    41          * 5.反序列化
    42          * 条件:实现Serilizable接口
    43          */
    44         
    45       //需要序列化的对象
    46         Person p = new Person("吴慷仁",54);
    47         //序列化到磁盘"G:seri.txt"
    48         ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("G:\seri.txt"));
    49         //写入数据
    50         out.writeObject(p);
    51         out.writeObject("美丽");
    52         out.writeObject(new Date());
    53         out.writeObject(123);
    54         out.close();
    55 
    56         //2.反序列化创建对象
    57         ObjectInputStream in = new ObjectInputStream(new FileInputStream("G:\seri.txt"));
    58         Person obj1 = (Person)in.readObject();
    59         String obj2 = (String)in.readObject();
    60         Date obj3 = (Date)in.readObject();
    61         int obj4 = (int)in.readObject();
    62         System.out.println("String类" + obj2 + "	" + "Date类" + obj3 + "	" + "Person类" + obj1 + "	"
    63         + "int类" + obj4);
    64         in.close();
    
    


  • 相关阅读:
    Java基础知识强化之IO流笔记39:字符流缓冲流之复制文本文件案例01
    阿里云服务器绕过25端口发邮件
    springboot在lunix后台启动,退出账号也不关闭
    创建Maven项目出错 pom出错
    corn表达式 经典
    开发微信公众号基本配置参数错误
    Spring与ActiveMQ整合
    log4j.properties 打印到控制台 写法
    如何在spring环境中做单元测试
    添加jar包到本地Maven仓库
  • 原文地址:https://www.cnblogs.com/rachelgarden/p/13715369.html
Copyright © 2011-2022 走看看