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. 安卓canvas操作的总结

    2014.07.03 使用canvas绘图 需求:公司需要绘制波形图,类似数学上的正弦波,一条是参考值,一条是实际曲线 解决方法:采用canvas绘图.保存为图片,以供导出 这里提供一个学习的demo ...

  2. dotnet调用node.js写的socket服务(websocket/socket/socket.io)

    https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...

  3. js如何准确获取当前页面url网址信息

    1.window.location.href(设置或获取整个 URL 为字符串) var test = window.location.href;alert(test);返回:http://i.cnb ...

  4. win8系统换win7系统

    吐槽一下先,win8换win7好费事~第一次弄,不过总算弄好了,记录一下吧. 首先,最坑人的就是,win8没法像win7那样按F1或者别的,直接进入BIOS,也就没法设置U盘引导,据说是由于win8的 ...

  5. 用NetStream的appendBytes播放FLV

    public class MiniStream extends Sprite { private var _buffer:ByteArray = new ByteArray(); private va ...

  6. Java:网络编程

    一.因特网地址 InetAddress类:实现主机名和因特网地址之间的转换. InetAddress address=InetAddress.getByName(String);返回一个InetAdd ...

  7. Flex移动皮肤开发(二)

    范例文件 mobile-skinning-part2.zip 在这个讨论创建 Flex 移动 skin 的系列的 第 1 部分 中,我讨论了 Flex 团队在 Mobile 主题中所做的性能优化的原理 ...

  8. 【Zookeeper】源码分析之Watcher机制(三)之Zookeeper

    一.前言 前面已经分析了Watcher机制中的大多数类,本篇对于ZKWatchManager的外部类Zookeeper进行分析. 二.Zookeeper源码分析 2.1 类的内部类 Zookeeper ...

  9. iOS 多线程NSThread理解与场景示例

    NSThread是相对GCD和NSOperationQuene而言,比较轻量级的一种多线程处理方式. 但同时,它的弊端就是需要自己管理线程的生命周期,以及线程同步:而另外两种不需要自己管理. 常见方法 ...

  10. OC基础了解篇

    .h文件存放声明 .m文件存放实现(支持c语言和OC的混编) .mm文件存放实现 (支持OC就和C++的混编) 异常处理,很少被用到/** *#import功能与#include功能一样就是包含文件 ...