java编程中创建对象和销毁对象 android开发教程

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:32 我要评论(0)

创建和销毁对象:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作。

1.考虑用静态工厂方法代替构造器

获取类的2种方法:1.提供一个公有的构造器;2.类提供一个公有的静态工厂方法,它只是一个返回类的实例的静态方法。如:

public static Boolean valueOf(boolean b){

return b?Boolean.TRUE:Boolean.FALSE;

}

静态工厂方法较构造器的优势:

* 静态工厂有名称

当一个类需要多个带有相同签名的构造器时,就用静态工厂代替构造器来使用不同的名称来区分。

* 不必每次调用的时候都创建一个新对象 静态工厂方法能为重复调用返回相同对象,由于创建对象的代价很高,这样极大地提高了性能。而且它还可以使不可变的类可以确保不会出现两个相等的实例,即当且仅当a==b时a.equals(b)为true。这样就可以使用==替换equals来提升性能。

* 它可以返回原返回类型的任何子类型的对象 这项技术适用于基于接口的框架,因为在该框架中,接口为静态工厂方法提供了自然返回类型。接口不能有静态方法,因此按照惯例,接口Type的静态工厂方法被放在一个名为Types的不可实例化的类。

* 在穿件参数化类型实例的时候,它们使代码更加简洁 在调用参数化的构造器时,即使类型参数很明显,也必须指明,这通常要求你接连两次提供类型参数:Map<String,List<String>> m=new HashMap<String,List<String>>(); 但使用静态工厂方法,编译器可以替你找到类型参数。这被称作类型推导(type inference).假设HashMap提供这个静态工厂:

public static <k,v> HashMap<k,v> newInstance(){

return new HashMap<k,v>;

}

则可以使用以下简洁的代码代替上述繁琐的

Map<String,List<String>> m=HashMap.newInstance();

静态工厂方法的缺点

* 类如果不含公有的或保护的构造器,就不能被子类化

* 静态工厂方法与其他的静态方法实际上没有任何区别

2.遇到多个构造器参数时要考虑用构建器(重叠构造器模式,JavaBeans模式,Builder模式)

静态工厂和构造器有个共同的局限性:不能很好地扩展到大量的可

选参数。如:一个类有很多参数,几个必选参数和一堆可选参数。程序员意向习惯采用重叠构造器(telescoping constructor)模式,在这种模式下,你提供一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有2个可选参数,以此类推,最后一个构造器包含所有可选参数。这类情况,一般的开发者会用**重叠构造器**

public class NutritionFacts{

private final int servingSize;//必选参数

private final int serving;//可选参数

private final int fat;//可选参数

public NutritionFacts(int servingSize){

this(servingSize,0);

}

public NutritionFacts(int servingSize,int serving){

this(servingSize,serving,0);

}

public NutritionFacts(int servingSize,int serving,int fat){

this.servingSize=servingSize;

this.serving=serving;

this.fat=fat;

}

}

这种构造器通常需要许多哦你本不想设置的参数,但还是必须给他们传值。譬如说只需要 servingSize和fat,则要用new NutritionFacts(5,0,10)的中间的0.

一句话重叠构造器模式可行,但当有很多参数的时候,客户端代码会很难编写,而且难以阅读

遇到许多构造器参数时,可以用第二种代替方法:**JavaBeans模式**。在这种模式下,调用一个无参构造器来创建对象,然后用setter 方法来设置每个必要的参数,以及每个可选参数:

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...