创建对象,在面向对象的程序设计里最基本的语句.都来说说如何创建对象,有哪些方式...>?
我先来说几种:
1. 构造器. 默认情况下,如果你不去编写构造器,JAVA类都会调用默认无参的构造器.构造器在传递参数时,一般以1-2个居多,超过4个参数的在API中很少见.相信这也是用的最多的创建对象的方法.但在需要参数太多时并不推荐.
2. 静态工厂方法. 利用静态工厂方法来创建对象,获得实例也是一种方法.这种方法尤其在单例模式中用到.使用静态工厂发放创建对象好处很多,例如通过名称可以知道确切含义,可以重复利用创建好的对象等.该方法在包装类型中比较多,如其中的valueOf()方法.实际应用中,我用的还是比较少.
3. 构建器模式. 当一个类有很多成员属性时,如何更好的创建对象,上述两种方式就不是那么的容易了.特别是其中有些属性可选的情况下,此时构建器不失为一种好的创建对象方法.这中创建对象的方式,相信经常用的更少.
以上是我的总结,还有其他情况,欢迎大家讨论.
另附构件器模式创建对象示例:
- Java code
/** * @author HUHG * 2009-07-29 11:37 */public class Nutrition { private final int servingSize; private final int servings; //option private final int calories; private final int fat; private final int sodium; //... more public static class Builder { private int servingSize; private int servings; //option private int calories= 0; private int fat= 0; private int sodium= 0; //... more public Builder(int servingSize, int servings){ this.servingSize= servingSize; this.servings= servings; } public Builder calories(int value){ calories= value; return this; } public Builder fat(int value){ fat= value; return this; } public Builder sodium(int value){ sodium= value; return this; } //... more public Nutrition build(){ return new Nutrition(this); } } private Nutrition(Builder builder){ servingSize= builder.servingSize; servings= builder.servings; calories= builder.calories; fat= builder.fat; sodium= builder.sodium; //... more } /** * @param args */ public static void main(String[] args){ Nutrition object= new Nutrition.Builder(100, 10).calories(20).fat(5).build(); //... use it }}
------解决方案--------------------
1.使用new操作符
2.调用Class或java.lang.reflect.Constructor对象的newInstance()方法
3.调用现有对象的clone()方法
4.通过java.io.ObjectInputStream类的getObject()方法反序列化。
5.如果字符串对象不是编译时常量,会创建一个隐含的StringBuffer对象处理
6.每个类在被装载时都会创建一个Class对象来代表它的类型
.....
就知道这些了
------解决方案--------------------
楼主的方法都是用了new
反射与clone应该是另外的两种
------解决方案--------------------
哦,还有序列化