如何保证对象的唯一性

简介:

/*
如何保证对象的唯一性:
   1.不允许其他程序用new来创建该类对象。
   2.在该类创建一个本类实例。
   3.对外提供一个方法让其他程序可以获取该对象的引用。
*/
public class Test{
    public static void main(String[] args){
        
       //Subject sub = Subject.oSub;//这种方法不可控,一般不访问成员
       Subject sub = Subject.getInstance();//我们可以在方法中增加条件,根据条件是否返回对象的引用,增加程序的可控性!
       new Student().show(sub);
       new Teacher().show(sub);
   }
}
 
class Subject{
    public  String sub;
    public static Subject oSub = new Subject();
    private Subject(){
        sub = "计算机科学与技术";
    }
     
    public static Subject getInstance(){
        //oSub = new Subject();
        //if(****) 增加 if 判断 可以 增加程序的可控性
        return oSub;
    }
     
    public String getSubject(){
        return sub;
    }
     
    public void setSubjcet(String name){
        sub = name;
    }
}
 
/*
 静态成员变量和普通成员变量的显示初始化的不同之处:
 以下面的例子为例:
 静态变量的显示初始化编译之后不会放进 构造函数中!(想一想啊,如果放进了构造函数中,那不就是产生对象了吗?那可能吗?
      它是静态的,是属于类的!普通成员变量是属于对象的,所以显示初始化会放进构造函数中)所以不会使构造函数一直调用,最终栈溢出
 而普通成员变量的显示初始化编译之后回放进构造函数中, 这样就会导致构造函数一直被反复调用!
 class Subject{
    public  String sub;
    //public Subject ss = new Subject();
    public static Subject oSub = new Subject();//恶汉式
        //public static Subject oSub = null;//懒汉式
    private Subject(){
            //oSub = new Subject();//oSub是静态变量,加上这一句就会导致oSub显示初始化时栈溢出!
        sub = "计算机科学与技术";
    }
     
    public static Subject getSubject(){       
        return oSub;
                //return oSub = new Subject();
    }
}
*/
 
class Student{
    public void show(Subject sub){
        System.out.println(sub.sub);
    }
}
 
class Teacher{
    public void show(Subject sub){
        System.out.println(sub.sub);
    }
}

目录
相关文章
|
小程序
微信小程序:本地开发环境和线上环境配置
微信小程序:本地开发环境和线上环境配置
1095 0
|
资源调度 分布式计算 调度
【赵渝强老师】Yarn的资源调度策略
Yarn作为资源和任务调度平台,支持多个应用程序同时运行,如MapReduce、Spark和Flink等。Yarn的资源调度方式主要包括FIFO Scheduler(先来先服务)、Capacity Scheduler(容量调度)和Fair Scheduler(公平调度)。FIFO Scheduler按任务提交顺序调度;Capacity Scheduler通过队列管理资源,支持多租户共享;Fair Scheduler则根据任务权重动态分配资源,确保公平性。
737 8
|
12月前
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
4211 66
|
机器学习/深度学习 存储 算法
技术笔记:LSH近似最近邻查找
技术笔记:LSH近似最近邻查找
261 0
|
数据采集 存储 安全
爬虫框架Playwright在Java环境下的开发实践
爬虫框架Playwright在Java环境下的开发实践
632 0
|
机器学习/深度学习 人工智能 自然语言处理
剑桥、腾讯AI Lab等提出大语言模型PandaGPT:一个模型统一六种模态
剑桥、腾讯AI Lab等提出大语言模型PandaGPT:一个模型统一六种模态
269 0
|
存储 SQL 机器学习/深度学习
【MaxCompute】 核心场景
在云计算、大数据时代,数据仓库的重要性毋庸置疑,其建设也在不断的进化中。某知名新零售客户在横向对比之后,毅然决定基于 MaxCompute 强大的计算能力进行数据仓库的建设。
【MaxCompute】 核心场景
|
弹性计算 监控 负载均衡
从零入门 Serverless | 一文详解 Serverless 架构模式
人的精力是有限的,组织的资源是有限的,Serverless 的理念可以让我们更好地用有限的资源解决真正需要解决的问题。
12747 2
从零入门 Serverless | 一文详解 Serverless 架构模式
|
缓存 NoSQL 算法
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(一)
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(一)
662 0
REDIS07_布隆过滤器BloomFilter的概述、优缺点、使用场景、底层原理、布谷鸟过滤器(一)
|
Kubernetes 负载均衡 网络协议
kubernetes service 原理解析
本文主要讲了 kubernetes 中 service 的原理、实现以及使用方式,service 目前主要有 5 种服务暴露方式,service 的容器发现是通过 endpoints 来实现的,其服务发现主要是通过 DNS 实现的,其负载均衡以及流量转发是通过 kube-proxy 实现的。
2525 0