如何保证对象的唯一性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
如何保证对象的唯一性:
    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);
     }
}









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3872833.html,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值