枚举(Enum
)
枚举是一种特殊的类,它可以像其他类一样有构造方法,成员变量、成员方法,但是不能被继承,
枚举虽然有构造方法,但是不能被实例化。
枚举的每个实例都声明在第一行,多个实例之间用,
隔开,最后用;
结尾。
package am;
public enum Variety {
ST("沈腾",47),
JC("金晨",30),
FCC("范丞丞",22),
BJT("白敬亭",28),FHH("樊hh",18),
JB("贾冰",48),
BJG("白举纲",27);
private String name;
private int age;
Variety(){}
Variety(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Test01{
public static void main(String[] args) {
Variety bjt = Variety.BJT;
System.out.println(bjt.getName());
System.out.println(bjt.ordinal());
Variety[] varieties = Variety.values();
for (Variety variety : varieties) {
System.out.println(variety.getName());
}
System.out.println(varieties[4].getName());
Variety.valueOf("FHH");
varieties[4].setName("小樊同学");
System.out.println(varieties[4].getName());
}
}
ordinal
枚举实例声明的索引值;
static values()
获取所有枚举常量的数组
static valueOf(String name)
通过枚举常量的名称(字符串)来获取对应的枚举实例
例:
根据当前时间返回对应的问候语
package pm;
import java.time.LocalTime;
public enum Greetings {
GREETINGS;
private String massage;
Greetings(){
LocalTime now = LocalTime.now();
int hour = now.getHour();
if (hour >= 6 && hour <10){
this.massage = "hello,早上好!";
} else if (hour >= 10 &&hour <14) {
this.massage = "hello,中午好!";
}else if (hour>=14 &&hour <18) {
this.massage = "hello,下午好!";
}else if (hour>=18 &&hour <23) {
this.massage = "hello,晚上好!";
}else {
this.massage = "hello,凌晨好!";
}
}
public String getMassage(){
return massage;
}
}
class Test03{
public static void main(String[] args) {
Greetings greetings = Greetings.GREETINGS;
System.out.println(greetings.getMassage());
}
}
设计模式
单例模式
注意:
单例类只能有⼀个实例。
单例类必须⾃⼰创建⾃⼰的唯⼀实例。
单例类必须给所有其他对象提供这⼀实例。
1、饿汉模式
package pm;
//饿汉模式
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
2、懒汉模式
package pm;
//懒汉模式
public class Singleton2 {
private static Singleton2 instance;
private Singleton2(){
}
public static Singleton2 getInstance(){
if (instance==null){
instance = new Singleton2();
}
return instance;
}
}
3、静态内部类
package pm;
//静态内部类
public class Singleton3 {
private Singleton3(){
System.out.println("创建对象");
}
public static Singleton3 getInstance(){
return Singleton3Inner.instance;
}
private static class Singleton3Inner{
private static final Singleton3 instance = new Singleton3();
}
}
class Test04{
public static void main(String[] args) {
Singleton3 instance = Singleton3.getInstance();
Singleton3 instance1 = Singleton3.getInstance();
System.out.println(instance1==instance); //true
}
}
4、枚举
public enum Singleton4 {
INSTANCE;
}