如果类成员有private修饰符,就不允许在类范围以外访问这个类成员。对类构造函数应用private修饰符时,则禁止外部类创建该类的实例。尽管看上去有些不好理解(既然不能实例化,那么这个类还有什么用处?),但实际上这是一个功能极其强大的特性。
最明显的是,如果类只通过静态方法和字段来提供功能,那么就常常使用私有构造函数。框架类库FCL中的System.Math类就是一个很经典的例子。
System.Math类有两个静态字段:pi和e(自然对数底数),还有一些返回三角函数值的方法。这些方法都作为内置函数,所以,程序没有必要为使用这些字段和方法而创建Math类的实例。
在前面关于静态方法的讨论中,我们给出了一个完成数制转换的类(见代码清单3ˉ5)。这里,再在该类中增加了一个私有构造函数,如代码清单3ˉ10所示。 
代码清单3ˉ10 在包含静态方法的类中使用私有构造函数
  
虽然这是一个简单的例子,但它展示了一个不需要实例化的类:其方法是静态的,并且没有与类实例相关的状态信息。
现在可能会很自然地出现这样一个问题:要避免实例化,使用私有构造函数好呢,还是使用抽象类更好一些?答案在于要理解这二者的区别。首先来考虑继承,虽然抽象类不能实例化,但其真正的目的是用于作为基类,以便派生类(可实例化)创建自己的实现。使用私有构造函数的类不会被继承,而且也不能被继承。其次,私有构造函数只能禁止外部类对该类进行实例化,却不能禁止在该类内部创建实例。
私有构造函数的特性也可以用于管理对象的创建。虽然私有构造函数不允许外部方法实例化这个类,但却允许此类中的公共方法(有时也称为工厂方法,factory method)创建对象。也就是说,类可以创建自身的实例、控制外界对它的访问,以及控制创建的实例个数。

最新文章

  1. 配置ngnix
  2. zepto源码--定义变量--学习笔记
  3. 算法系列3《SHA》
  4. (11)nehe教程5---3D空间
  5. 51单片机 Keil C 延时程序的简单研究
  6. Cortex-M3学习日志(五) -- DAC实验
  7. PHP:根据IP地址获取所在城市
  8. 《转》Python多线程学习
  9. Centos 执行shell命令返回127错误
  10. 导出含有图片的Java项目,图片不显示
  11. codeforces24D
  12. [python,2018-03-06] python中的继承顺序
  13. 转发:Android开发?用C#!!
  14. OCM_第四天课程:Section2 —》GC 的安装和配置
  15. 【mysql】ICP下mysql执行计划的一次解析
  16. centos7下apache2.4反向代理
  17. 使用XHProf分析PHP性能瓶颈(一)
  18. spring-boot 实现文件上传下载
  19. cookie和session得区别
  20. RPC框架实践之:Apache Thrift

热门文章

  1. js数字验证
  2. 我的美国(北美)计算机CS实习面试经验分享
  3. 基于vue2.0的一个分页组件
  4. JavaMail发送简单邮件
  5. spring下配置dbcp,c3p0,proxool[转]
  6. php array 排序 感悟
  7. iframe自适应高度的多种方法方法小结(转)
  8. SQL Server 的 6 种隔离级别
  9. MYSQL create database 和 create table 做了一些什么!
  10. Linux上配置Nginx+PHP5(FastCGI)