-------
android培训、
java培训、期待与您交流! ----------
枚举就是要某个类型的变量的取值只能为若干个固定的值中的一个,
否则编译失败,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,
普通变量的方式在开发阶段无法实现这一目标
条件:
1.使用的构造方法
2.每个元素分别用一个公有的静态成员变量表示
3.可以有若干共有方法,
枚举就是要某个类型的变量的取值只能为若干个固定的值中的一个,
否则编译失败,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,
普通变量的方式在开发阶段无法实现这一目标
条件:
1.使用的构造方法
2.每个元素分别用一个公有的静态成员变量表示
3.可以有若干共有方法,
需求:定义星期几的变量
<strong>public abstract class Weekday {
private Weekday(){};
public final static Weekday SUN = new Weekday(){
@Override
public Weekday nextday() {
return MON;
}
};
public final static Weekday MON = new Weekday(){
@Override
public Weekday nextday() {
// TODO Auto-generated method stub
return SUN;
}
};
public abstract Weekday nextday();
@Override
public String toString() {
return this==SUN?"SUN":"MON";
}
}</strong>
<strong>public class EnumDemo {
public static void main(String[] args) {
Weekday week1 = Weekday.SUN;
System.out.println(week1.nextday()); //输出:MON
Week week = Week.THL;
System.out.println(week); //THl
System.out.println(week.name()); //THL
System.out.println(week.ordinal()); //4,第四个位置
System.out.println(Week.valueOf("SUN")); //SUM
System.out.println(Week.values().length); //7
}
}
//jdk1.5后可以自定义个枚举对象
enum Week{
SUN,MON,TUE,WED,THL,FRI,SAT
}</strong>
枚举就相当于一个类,其中也可以定义构造方法,成语变量,普通方法和抽象方法
枚举的元素必须位于枚举体的最开始部分,枚举元素列表又有分号与其他成员分隔,把枚举中的成员方法或者变量等放在枚举元素的前面,
编译器会报错
编译器会报错
带构造方法的枚举:
构造方法必须定义成私有的
构造方法必须定义成私有的
枚举只有一个成员时,就可以作为一个单例的实现方式
//需求:使用枚举制作红绿灯
//需求:使用枚举制作红绿灯
public class EnumDemo2 {
public static void main(String[] args) {
TrafficLamp lamp = TrafficLamp.RED;
System.out.println(lamp.nextLamp()); //GREEN
}
}
enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return null;
}
},
YELLOW(5){
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time) {
this.time = time;
}
}
单例模式
就是一种常见的软件设计模式。
单例模式的作用:可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,系统中只存在一个对象。
我们锁了解到的开发所用到的模式有那些?
1.装饰模式;(灵活,避免继承体系的臃肿,提供更强的功能)
2.代理模式;
3,适配器模式
4,抽象工厂;
实现单例模式的方法有很多,可以使用不同的语言进行编写,我们这就创建两个简单的单例模式 (不同方式)
方法一: (饿汉式)
单例模式的作用:可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源,系统中只存在一个对象。
我们锁了解到的开发所用到的模式有那些?
1.装饰模式;(灵活,避免继承体系的臃肿,提供更强的功能)
2.代理模式;
3,适配器模式
4,抽象工厂;
实现单例模式的方法有很多,可以使用不同的语言进行编写,我们这就创建两个简单的单例模式 (不同方式)
方法一: (饿汉式)
class Single {
private static final Single s = new Single();
private Single() {
}
public static Single getInstance() {
return s;
}
}
分析:代码中的构造函数必须设置为私有的,不然用户会使用构造函数进行创建新的对象;
该单例对象在系统启动时就立即创建,我们可以使用静态方法直接引用。
方法二:(懒汉式)
使用懒汉式如果是多线程程序,会出现多线程的安全问题,所用我们必须使用同步锁进行操作,防止多线程同时创建多个对象
好处:懒加载(和现在的图片懒加载、Hibernate延时加载)
方法二:(懒汉式)
使用懒汉式如果是多线程程序,会出现多线程的安全问题,所用我们必须使用同步锁进行操作,防止多线程同时创建多个对象
好处:懒加载(和现在的图片懒加载、Hibernate延时加载)
class Single {
private static Single s = null;
private Single() {
}
public static Single getInstance() {
if (s == null) {
synchronized (Single.class) {
if (s == null) {
s = new Single();
}
}
}
return s;
}
}
代码分析:懒汉式也就是懒加载,系统启动是还不会立即创建单例对象,当用户调用时,才真正的创建单例对象,但是,当我们使用的是多线程操作时,可能就会出现线程的安全问题,为了保证单例,我们必须使用同步锁进行安全保护,使得共享的数据不存在安全问题!