Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1326833
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2010-11-22 15:12:18

java中生成对象的方式有多种,如下所示:
 1、使用new操作符,这是最普遍的一种
   如:String s=new String("abc");
 
 2、使用反射动态生成
    利用Class,ClassLoader,Constructor中的方法可以动态的生成类实例
    如:Object o=Class.forName("java.lang.String").newInstance();
        Object o=String.class.getClassLoader.loadClass("java.lang.String").newInstance();
        以上的方式需要目标类拥有公有无参构造函数
    以下使用Constructor进行动态生成
    class User{
       public User(String user,Integer id){}
    }
    Constructor c=User.class.getConstructor(new Class[]{String.class,Integer.class});
    User user=(User)c.newInstance(new Object[]{"zhang san",123});

3、使用克隆生成对象
   例如使用一个实现了Cloneable接口的对象,调用其clone()方法获得该对象的一份拷贝
   
4、利用反序列化从流中生成对象
   利用ObjectInptuStream的readObject()方法生成对象
 
 
 
===============================================
 
以String类为例 
第一种(通过new ): 
String str = new String(); 
第二种(利用工厂模式): 
String str = Class.forName(String).newInstance() 为工厂模式
第三种:(利用克隆)clone
第四种:(利用反射)
第五种:(使用Spring的DI)
---------------------------------------------------------------
创建对象的方法只有一种,那就是用 new 关键字创建。

其他的都是获得对象的方法,有3种:
1、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()方法。
2、调用对象的clone()方法。
3、运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
创建对象和获得对象不一样,创建只有new来创建,其他的都是获得对象的手段,知道的就这么多了。
阅读(444) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~