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!

人工智能实验室
相关文章相关文章
  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

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

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...