/** * Created by xabcd on 2019/2/14. */ public class testprivate2 { String name; //本类中声明一个Person对象p,使用final标记,表示不能再重新实例化 private static final testprivate2 p = new testprivate2(); //上面生成一个实例化对象,且被标识静态,且final表示对象p无法重新实例化 private testprivate2()//封装 外部无法进行实例化 { name = "张三"; } public static testprivate2 getP() { return p; } public static void main(String args[]) { //声明一个testprivate2类的对象 testprivate2 p = null;//声明对象但是未实例化 p = testprivate2.getP();//调用类中的getP()方法,此方法返回类的实例化对象 System.out.println(p.name); } } 结果:张三
第 6 ~ 9private testprivate2() 行将 Person 类 的 构造 方法 封装 起来, 外部 无法 通过 其 构造 方法 产生 实例 化 对象。 第 5 行 声明 一个 Person 类 的 实例 化 对象, 此 对象 是在 Person 类 内部 实例 化, 所以 可以 调用 私有 构造 方法。 另外, 此 对象 被 标识 为 static 类型, 表示 为 一 静态 属性, 同时 此 对 象被 私有化, 另外 在 声明 Person 对象 的 时候 加上 了 一个 final 关键字, 此 关键字 表示 Person 的 对象 p 不能 被 重新 实例 化( 关于 final, 请参阅 第 11 章 中的 11. 3 一节)。 第 21 行 声明 一个 Person 类 的 对象 p, 但未 实例 化。 第 22 行 调用 Person 类 中的 getP() 方法, 此 方法 返回 Person 类 的 实例 化 对象。 【范例 分析】 从 程序 中 可以 看出, 无论 在 Person 类 的 外部 声明 多少 个 对象, 最终 得到 的 都是 同一个 引用, 因为 此类 只能 产生 一个 实例 对象, 这种 做法 在 设计 模式 中 被称为 单 态 模式。 而 所谓 设计 模式 也就 是在 大量 的 实践中 总结 和 理论化 之后 优选 的 代码 结构、 编程 风格 以及 解决问题 的 思考 方式。 有兴趣 的 读者 可以 研究 一下。