private关键字作为一个重要的关键字,我们在开发中会经常用到,可是你有没有想过通过private关键字我们可以创建一个别人无法通过new来新建的类呢?下面我们就来看一下:

package returnobject;

public class RerurnObject {
public static void main(String args[]){
// Test test = new Test(); 通过这一条是无法创建Test对象的
Test test = Test.returnObject();
Test test2 = Test.access();
Test test3 =Test .access(); //虽然编译通过,但是实际并不会新建Test类
Test test4 =Test .access(); //虽然编辑通过,但是实际并不会新建Test类 } } class Test{
private Test(){
System.out.println("成功创建一个Test对象!");
}
private static Test test2 = new Test(); public static Test access(){
return test2;
} public static Test returnObject(){
return new Test();
} }

  正如上面代码所展示的,Test类是无法通过new来新建的,具体的原理是这样的:我们在Test类的构造器(构造方法)前面添加了关键字private,然后这个类就无法被创建了,但是我们可以通过Test类的静态方法来创建Test类,让其返回一个Test类。

  可能会有人问了,这样做有什么好处呢?试想一个,如果你想控制新建类(new 类名)的数量,那么这种方法无疑是最好的解决方案!特别是在将test2编程Test的一个静态私有成员(private static)以后,有 一个而且只能有一个。除非通过public 方法access(),否则根本无法访问它。

private关键字实现控制新建类数量的更多相关文章

  1. 阶段1 语言基础+高级_1-2 -面向对象和封装_15练习使用private关键字定义

    练习使用private关键字定义一个学生类.通过这个联系说明一种特殊情况 先定义了name个age分别再定义getter和setter的方法 boolean类型的getter方法不能叫做get开头的. ...

  2. C++中类继承public,protected和private关键字作用详解及派生类的访问权限

    注意:本文有时候会用Visual Studio Code里插件的自动补全功能来展示访问权限的范围(当且仅当自动补全范围等价于对象访问权限范围的时候),但是不代表只要是出现在自动补全范围内的可调用对象/ ...

  3. synchronized关键字以及实例锁 类锁

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...

  4. 设计模式之美:Private Class Data(私有类数据)

    索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):实现对初始化数据的封装. 意图 封装类的初始化数据,控制对类的属性的更改,并保持类数据与使用数据的方法间的隔离. Encapsulate ...

  5. Java--Semaphore控制并发线程数量

    package com; import java.util.concurrent.Semaphore; /** * Created by yangyu on 16/11/28. */ /** * Se ...

  6. static,this,private关键字用法

    1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...

  7. 【java】private关键字

     private关键字(1)修饰成员:可以修饰成员变量和成员方法(2)特点:被private修饰的后的成员只能在本类中被访问 (3)private的应用:定义类的时候,当把成员变量给private修饰 ...

  8. swift新建类和子类方法的重写与重载

    1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...

  9. AJPFX总结private关键字

    private关键字        什么是private关键字?                它是一个修饰符,代表私有的意思,它可以修饰成员变量和成员方法 private关键字的特点?        ...

随机推荐

  1. IOS9任务管理器特效的实现

    IOS9任务管理器特效的实现 IOS9中通过双击home键可以打开任务管理器,和以前版本不一样的地方时这这次使用的3D的特效,见下图: 那么如何在我们的APP中也制作出这样的特效呢?在GItHub上有 ...

  2. javascript--正则表达式--更新中

    引用地址:http://www.iteye.com/topic/481228 和http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222 ...

  3. ios framework 开发实战 之 参考

    WWDC2014之iOS使用动态库 iOS开发——创建你自己的Framework 使用CocoaPods开发并打包静态库 iOS Framework 和CocoaPods TDD的iOS开发初步以及K ...

  4. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  5. Flex timer使用 keydown事件注册到stage

    Flex timer使用 keydown事件注册到stage: <?xml version="1.0" encoding="utf-8"?> < ...

  6. FineUI表格模板列Undefined问题

    一般是配置文件未添加ClientID="AutoID"引起

  7. jQuery事件触发和参数传递

    jQuery事件触发和参数传递: 参考:http://www.jb51.net/article/36249.htm <%@ page language="java" impo ...

  8. Linux笔记(三) - 文件搜素

    (1)文件搜索:find-name  根据文件名, *匹配任意字符 ,?单个字符-iname  根据文件名, 不区分大小写-size 根据文件大小查找 (+ 大于 -小于)(-a并且 -o或者)-us ...

  9. Js让光标停在输入框input框最后面

    var val = $(this) val();   1.$(this). focus(); 2.$(this).val(""); 3.$(this).val(val);   1. ...

  10. DTLS 技术要点解析

    一.DTLS DTLS 是指 Datagram Transport Level Security,即数据报安全传输协议: 其提供了UDP 传输场景下的安全解决方案,能防止消息被窃听.篡改.身份冒充等问 ...