zoukankan      html  css  js  c++  java
  • java基础系列(五):创建对象的那几种方式

    创建对象的5种方式:

    1. 最常用的通过new关键字,Object obj = new Object();
    2. 通过Class类的newInstance()方法,Student.class.newInstance()(已经不推荐使用了);
    3. 通过Constructor类的newInstance()方法,obj.class.getDeclaredConstructor()方法。调用构造器的方式有三种,new关键字,反射和反序列化,这里采用的是第二种方式。
    4. Clone()方法,分为深复制和浅复制,深复制复制对象及引用的对象,浅复制只复制引用,不复制引用的对象。
    5. 序列化,序列化就是将对象的状态转换为字节流,反序列化是将字节流生成相同状态的对象。序列化的作用:(1).网络上传输(2)实现数据的持久化

       这篇文章主要讲一下clone()方法的使用,下一篇再谈序列化。

    clone()方法

      clone()方法分为深复制和浅复制,区别在于复制引用还是复制引用的对象。此外,clone()是个native方法,前面的文章已经提到,并与相关方法做了比较。

    (1), 浅复制

    class Student implement Cloneable{
      public Integer id;
      public String name;
      public Grade grade;
      public Student(Integer id,String name,Grade grade){
        this.id = id;
        this.name = name;
        this.grade = grade;
      }
      @Override
      protected Student clone() throws CloneNotSupportedException {
      return (Student)super.clone();
      }
    }
    class Grade implement Cloneable{
      public String name;
      public Integer score;
      public Grade(String name,Integer score){
        this.name = name;
        this.score = score;
      }
      
      @Override
      protected Student clone() throws CloneNotSupportedException {
      return (Student)super.clone();
      }
    }

    (2)深复制

    class Student implement Cloneable{
      public Integer id;
      public String name;
      public Grade grade;
      public Student(Integer id,String name,Grade grade){
        this.id = id;
        this.name = name;
        this.grade = grade;
      } 
      @Override
      protected Student clone() throws CloneNotSupportedException {
        Student student = (Student)super.clone();
        student.grade = (Grade)grade.clone();
      
    return student;   } }

    使用clone方法的步骤:

      1)被克隆的类要实现Cloneable接口。

      2)被克隆的类要重写clone()方法。

      cloneable接口中没有任何的方法,它的作用只是用来只是可以使用Object的clone()方法进行合法的克隆,如果不实现接口直接调用就会CloneNotSupportedException。

    效率分析:

      clone()创建对象的方法要比new一个对象要快很多,因为clone是本地方法,直接对内存中的二进制流进行操作,特别是在创建一个大对象时,性能差别很大的。

  • 相关阅读:
    Python的注释
    Python的优缺点
    pymysql模块
    python(pymysql操作数据库)
    面向对象的测试用例设计有几种方法?如何实现?
    请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
    什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
    当开发人员说不是BUG时,你如何应付?
    性能测试的流程?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
  • 原文地址:https://www.cnblogs.com/amazing-eight/p/13258929.html
Copyright © 2011-2022 走看看