java学习05

  

package day20140918;

import org.junit.Test;
/*
 * 由于昨天面试问到了单例模式
 * 回顾一下
 * 单例设计模式
 * */


//饿汉式,类一加载就存在,线程安全
class SingleE{

    //定义一个私有成员,便于测试
    private int num = 1;
    private static final SingleE single = new SingleE();
    
    private SingleE(){
        num++;
    }
    
    public static SingleE getInstance(){
        return single;
    }
    
    public int getInt(){
        return num;
    }
}

//懒汉式,后加载,线程不安全
class SingleL{
    
    private SingleL(){}
    
    private static SingleL single = null;
    
    public static SingleL getInstance(){
        //两层判断,提高程序的效率,不加这层判断,则每次都要判断锁,程序效率很低
        if(single == null){
            //加锁,防止多线程时,同时生成多个single,不能保证唯一性
            synchronized (SingleL.class) {
                if(single == null){
                    single = new SingleL();
                }
            }
        }
        return single;
    }
}


public class SingleDemo {
    
    @Test
    public void test(){
        
        SingleE s1 = SingleE.getInstance();
        
        System.out.println(s1.getInt());        //2
        SingleE s2 = SingleE.getInstance();
        
        System.out.println(s1.getInt());        //2
        System.out.println(s2.getInt());        //2
        
    }
    
}

另外,复习了Java中1.5版本增加的枚举类型enum。枚举是一种特殊的类,当我们使用某些数据只需要特定的几个值时,可以使用枚举。当枚举中只有一个对象时,其实就是单例模式!!其他的不说了,上代码~

package day20140918;

import org.junit.Test;

/*
 * 枚举enum的学习,写一个代表星期的枚举,里面有一个方法,返回对象星期的中文名。
 * 
 * */
public class Syudy {
    
    //定义一个枚举,表示星期一到星期天
    enum WeekDay{
        
        //7个对象
        MON("星期一"),
        TUE("星期二"),
        WED("星期三"),
        THU("星期四"),
        FRI("星期五"),
        SAT("星期六"),
        SUN("星期日");
        
        private String weekName;
        
        //构造函数必须私有,因为枚举只能取定义的值,外部不能new对象
        private WeekDay(String weekName){
            this.weekName = weekName;
        }
        
        public String getName(){
            return weekName;
        }
    }
    
    @Test
    public void test1(){
        
        System.out.println(WeekDay.TUE);                  //TUE
        System.out.println(WeekDay.TUE.getName());        //星期二
    }
    
    
    //第二种方法,用抽象函数
    enum WeekDay1{
        
        MON(){
            public String getWeekName(){
                return "星期一";
            }
        },
        
        TUE{
            public String getWeekName(){
                return "星期二";
            }
        },
        
        WED{
            public String getWeekName(){
                return "星期三";
            }
        },
        
        THU{
            public String getWeekName(){
                return "星期四";
            }
        },
        
        FRI{
            public String getWeekName(){
                return "星期五";
            }
        },
        SAT{
            public String getWeekName(){
                return "星期六";
            }
        },
        
        SUN{
            public String getWeekName(){
                return "星期日";
            }
        };
        
        
        //定义一个抽象方法,获得星期中文名
        public abstract String getWeekName();
    }
    
    @Test
    public void test2(){
        
        WeekDay1 fri = WeekDay1.FRI;
        
        System.out.println(fri.getWeekName());       //星期五
        
        //枚举的偏移量,从0开始
        System.out.println(fri.ordinal());           //4
        
        //得到枚举的所有对象
        WeekDay1 [] wds = WeekDay1.values();
        
        for(WeekDay1 wd : wds){
            System.out.println(wd.getWeekName());
        }
        
        /*星期一
        星期二
        星期三
        星期四
        星期五
        星期六
        星期日*/

    }
}

学习是一个不断积累,不断坚持的过程,希望每天都能感觉到自己的进步,工作也会因此而变得更加充实~学习的时候要用心,知其然,还要知其所以然,这是我对我自己的要求,尽量把握每个细节。昨天的面试也证明了,细节决定成败~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。