欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于对象生成的方式 thread 

程序员文章站 2022-06-08 21:16:06
...
1.使用new关键字生成和不使用new关键字生成对象.
对象生成的方式.
1:new 关键字生成.
Person person = new Man();
这是生成对象最直接的方式.


2:反射方式生成.
使用反射方式生成对象,首先要获得一个Class对象.
获得一个Class对象的方式:
     1:  Class<?> clazz = Class.forName("mypack.Man");
    
     2:           clazz = Thread.currentThread().getContextClassLoader().loadClass("mypack.Man");
                  包括 ClassLoader的其它能够返回Class对象的方法.
     3:           clazz = MyClass.class;
     4:           clazz = object.getClass();
                  这种方式对现再讨论的意义不大,但这也是获得Class对象的一种方式.
得到Class对象之后调用newInstance()方法就可以直接得到一个对象.当然也可以再获得Constructor的一个对象以生成对象.
     Person person = (Person)clazz.newInstance();

3:clone()方法生成.
  对于final类,可以调用构造方法生成clone对象;
  对于非final类,只能调用super.clone(),所调用的方法也只能是final 型的,如果一个用于继承目的类,则clone()应该throws CloneNotSupportedException,以便当其子类不需要clone功能时,可以关闭.
  public Object clone() throws CloneNotSupportedException {
    throw new CloneNotSupportedException();
  }

4:序列化接口使用InputStream做为唯一参数生成对象.
  流方式构造对象.
  自动序列化不太容易看到过程.
  手动序列化则更能看到反序列化的过程.
  private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException {
      in.defaultReadObject();
      this.name = (String)in.readObject();
      this.age  = in.readInt();
  }
  此时readObject等同一个公有的构造方法.
  实现Serializable的子接口 Externalizable也是一种手动序列化的办法.
  与Serializable不同的是,Serializable完全基于二进制流,Externalizable在反序列化时首先调用公共无参构造方法生成实例,
  然后调用readExternal方法,通过ObjectInputStream读取信息,返回反序列化的对象.
  public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException {
      
  }
相关标签: thread