枚举【enumeration】
枚举是一组常量的集合;
属于一种特殊的类,里面只包含一组有限的特定的对象;
自定义类实现枚举——应用
-
不需要提供 setxxx 方法,因为枚举对象值通常为只读;
-
对枚举对象/属性使用 final+static 共同修饰,实现底层优化;
-
枚举对象名通常使用全部大写,常量的命名规范;
-
枚举对象根据需要,也可以有多个属性;
public class Enumeration_01 {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
System.out.println(Season.AUTUMN);
System.out.println(Season.WINNER);
}
}
class Season{
private String name;
private String desc;
//第三:在Season内部 定义四个固定的枚举对象;
public static final Season SPRING=new Season("春天","舒服");
public static final Season SUMMER=new Season("夏天","炎热");
public static final Season AUTUMN=new Season("秋天","凉爽");
public static final Season WINNER=new Season("冬天","寒冷");
//第一:构造器私有化,防止直接new对象出来;
private Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
//第二不设置set方法;防止属性被修改;
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
小结:
-
构造器私有化
-
类内部创建一组对象;
-
对外暴露对象【即:public static final修饰】
-
提供get方法,不提供set方法;
枚举类
使用关键字enum时,会隐式的继承Enum类、不能再extends其他类;
说明
第一:使用enum来代替class;
第二:public static final Season SPRING=new Season("春天","舒服")————>>SPRING ("春天","舒服")
第三:多个常量,用逗号 ,隔开
第四:如果使用enum来实现枚举。要求将定义常量对象,写在前面;
第五:如果我们使用的是无参构造器,创建常量对象,可以省略();
package com.cc.Enumeration_02;
public class Enumeration_02 {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.SUMMER);
System.out.println(Season2.AUTUMN);
System.out.println(Season2.WINNER);
}
}
//枚举类enum
//第一:使用enum来代替class;
enum Season2{
//第二:public static final Season SPRING=new Season("春天","舒服");
//改写:————>>SPRING ("春天","舒服")
//第三:多个常量,用逗号 ,隔开
//第四:如果使用enum来实现枚举。要求将定义常量对象,写在前面;
//第五:如果我们使用的是无参构造器,创建常量对象,可以省略();
SPRING ("春天","舒服"),SUMMER("夏天","炎热"),
AUTUMN("秋天","凉爽"),WINNER("冬天","寒冷"),
What();//也可写出What;
private String name;
private String desc;
//无参构造器
private Season2(){
}
private Season2(String name, String desc) {
this.name = name;
this.desc = desc;
}
//第二不设置set方法;防止属性被修改;
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
enum常用方法
练习
public class Enumeration_exercise01 {
public static void main(String[] args) {
//获取枚举的所有对象,就是一个数组
Week[] weeks = Week.values();
//遍历取出,
//增强的for循环,每次从weeks取出,直到嘴后一个取完结束;
for(Week week:weeks){
System.out.println(week);//输出week;
}
}
}
//声明枚举类Week
enum Week {
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
THURSDAY("星期四"),FRIDAY("星期五"),STAURDAY("星期六"),
SUNDAY("星期日");
private String name;
public String getName() {
return name;
}
private Week(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}
可以用来实现接口:
public class demo {
public static void main(String[] args) {
a.Q.y();//实现接口
}
}
interface c{ public void y();}//接口c
enum a implements c{
Q("QQ号") ;
private String q;
public void y(){
System.out.println("123123131");
};
a(String q) {
this.q = q;
}
}
注解【annotation】
说明:
注解也被称为元数据(metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息;
和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息;
@Target是修饰注解的注解, 也叫元注解;【概念】
1、@Override
-
表示指定重写父类的方法(在编译层面),如果不是则会报错;
-
不写@Override,但构成方法的重写也不影响;
2、@Deprecated
-
@Deprecated修饰某个元素,表示该元素已经过时。
-
不推荐使用,但仍然可以使用
-
从@Deprecated源码可以看出,可以用来修饰方法,类,包,字段,参数,等等;
-
@Deprecated可以坐版本升级过渡使用
3、@SuppressWarnings
-
当我们不希望看到警告的时候,可以用@SuppressWarnings来抑制警告信息;
-
在{" "}中,可以写入你希望抑制的警告信息;
-
作用范围与@SuppressWarnings的位置有关;