zoukankan      html  css  js  c++  java
  • 如何保证对象的唯一性

    /*
    如何保证对象的唯一性:
       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);
    	}
    }
    

      

  • 相关阅读:
    js遍历Object所有属性
    使用JAVA开发微信公众平台(一)——环境搭建与开发接入
    使用Vue.js实现列表选中效果
    c#以POST方式模拟提交表单
    vue项目里的日期格式化
    Hadoop概念学习系列之Hadoop、Spark学习路线(很值得推荐)
    CentOS下的Mysql的安装和使用
    CentOS中zip压缩和unzip解压缩命令详解
    vue路由跳转传参数
    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3872833.html
Copyright © 2011-2022 走看看