1  new一个对象
2  clone一个对象
3  reflect一个对象
4  反序列化一个对象
请高手略微指点,比较一下 谢谢

解决方案 »

  1.   

    1.直接实例化
    2.克隆一个对象,对其副本操作,不影响被克隆的对象.同时分深度克隆个浅克隆
    3.反射机制 每个类都有.getClass().getDeclaredFields()等方法,该机制是使用这种方法实现
     反射.反射机制用于运行后才能知道类名的
    http://community.csdn.net/Expert/TopicView.asp?id=5228171 另外一个兄弟写的
    4.反序列化对象?不太了解,学习中.等待更加详细的解释  呵呵!
      

  2.   

    1  new一个对象
    调用构造函数,创建对象,系统重新分配内存,再初始化数据2  clone一个对象
    直接分配内存,拷贝数据(分深度浅度),比new效率要高很多3  reflect一个对象
    通过String来得到对象。最终还是new了一个,比较消耗资源,但使用灵活。很多地方必须用这种方法来获得对象4  反序列化一个对象
    通过流来构造对象,类似于反射。比较消耗资源。对象必须是可序列化的。一般用于对象传输
      

  3.   

    new 是最高效的
    分配就是分配,怎么会有重新?
    怎么还有直接分配的说法?难道还有间接分配?
      

  4.   

    clone才是最高效的clone直接把内存数据拷贝过去,变量不用赋默认值,不需要调用构造函数new方法实际上是先分配内存,然后变量赋默认值,然后调用构造函数
    这就是为什么建议使用clone而不是new
    class A implements Cloneable{
      private static A a=new A();
      private A(){
      }
      public static A newInstance(){
        try {
          return (A) a.clone();
        }
        catch (CloneNotSupportedException ex) {
          return null;
        }
      }
      public Object clone() throws CloneNotSupportedException {
        return super.clone();
      }
    }
    上面是一个比较常见的通过静态方法得到对象的类,一般情况下建议采用clone的方式来做,这样效率高
      

  5.   

    反序列化主要用于网络间传输对象
    比如在WEB SERVICE应用中
    如果需要传输一个自定义的类首先把对象序列化成字符串
    把这个字符串传输到接收端
    接收端把这个字符串反序列化成一个类简单的比喻,实际情况更复杂一些