如何保证对象的唯一性

/*
如何保证对象的唯一性:
   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);
    }
}
时间: 2024-11-08 19:34:28

如何保证对象的唯一性的相关文章

(单例设计模式中)懒汉式与饿汉式在多线程中的不同

/*  目的:分析一下单例设计模式中,懒汉式与饿汉式在多线程中的不同!  开发时我们一般选择饿汉式,因为它简单明了,多线程中不会出现安全问题!  而饿汉式需要我们自己处理程序中存在的安全隐患,但是饿汉式的程序技术含量更高! */ /* class SinglePerson implements Runnable{    private static SinglePerson ss = new SinglePerson("hjz", 22);//恶汉式    private int ag

《设计模式》学习笔记5——单例模式【高并发拓展】

定义 单例模式又称为单件模式,这个模式大概是设计模式中最好理解的了,我起初就打算从这里开始学,甚至还记过另一篇单例模式学习的笔记. 但是之后跟着<设计模式>这本书系统的学,就索性从第一页开始,而单例模式算是复习,也算是再深入的理解一次. 之所以要这么做,是因为上一次写的没有给出更标准的定义,同时,当时只介绍了基础的懒汉式和饿汉式,对于并发时候的单例却没有涉及,所以这篇学习的重点应当在于高并发时如何保证我们的单例依旧是单例. 单例模式引用书中的定义如下: 单例模式(Singleton Patte

.NET 多线程同步 / 并发操作数据唯一

问题描述 在实际应用过程中很多情况下涉及大批量.频繁访问,这样就会存在并发操作,如何保证数据的唯一正确性就成了一个问题,以下将自己为别人做的一个示例展示给大家,什么不足的地方大家也提提意见!应用场景:售票系统,假如涉及到以下几种简单数据访问操作:1.余票查询:2.购票:3:临时增加售票/退票,如果访问量较大,很多个用户同时访问时.如1和2同时操作,2和3同时操作,1和3同时操作,就可能导致获取的数据信息不准确,这里我们就需要的效果就是当任何一个用户在进行如上的1或2或3操作时,其它用户都处于等待

HashTest以及对象唯一性(三)

package cn.cp; //当然可以自动生成代码equals()和hashCode()方法,来确保对象的唯一性. //这样的话存入HashTest的对象就保证了唯一性 import java.util.HashSet; import java.util.Iterator; class Boy3 { private int age; private String name; public Boy3(int age, String name) { super(); this.age = age

如何保证Excel中数据的唯一性

问:在Excel中录入数据时,有时会要求某列单元格中的数据具有唯一性,例如身份证号码.发票号码之类的数据.但是我应该如何做才能确保不会输入重复一样的数据呢? 答:为了保证数据的唯一性,我们可以这样做:选定目标单元格区域(这里假设为A1:A10),依次单击数据/有效性,打开数据有效性对话框.在设置选项卡中单击允许下拉列表,选择自定义.然后在分工中输入=countif($A$1:$A$10)=1.接着,单击切换到出错警告卡,在样式中选择停止,然后分别在标题和错误信息中输入错误提示标题和信息.设置完毕

Oracle中提取和存储数据库对象的DDL

oracle|对象|数据|数据库     从对象(例如数据库表.索引.约束.触发器等)中提取DDL命令的普通方法涉及到的操作包括从这些对象中提取元数据(metadata),并把这些数据存储在内存中.尽管目前有很多脚本可以实现这样的功能,但是它们通常都是不完整的或者过时的.幸运的是,Oracle 9.2提供了一个实现这样的功能的API:DBMS_METADATA程序包. 在很多情况下,数据库中数据的维护操作要求我们提取多种对象(例如数据库表.索引.约束.触发器等)的DDL(Data Definit

Hibernate的核心对象关系映射

Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee.hbm.xml"/> 第二种://便于测试,会自动加载映射文件:employee.hbm.xml   private static SessionFactory sf;     static{         //加载主配置文件,并且创建session工厂       sf = new Con

JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习

JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的 我们重点关注的是子类对象 我们来聊聊 一.HashSet HashSet底层结构是哈希表 什么是HashSet? package com.lgl.hellojava; //公共的 类 类名 public class HelloJ

JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中,也是能看到他的,所以还是非常值得去学习的一个知识点的,我们直接开车了 一.Map概述 泛型< k,v> 键值对,映射关系 基本特点 该集合存储键值对,是一对一对往里存,而且要保证键的唯一性 1.添加 put(key ,values) putAll() 2.删除 clear() remove(ob