枚举
自定义枚举类
创建方法
1、将构造器私有化,防止直接new
2、去掉setXXX方法,防止属性直接被修改
3、在类的内部,直接创建固定的对象
4、优化:在创建对象时添加final修饰,类就不会被加载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiDq1Wz7-1623685638664)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611125337817.png)]
注意事项
- 对枚举对象/属性使用final+static共同修饰,实现底层优化
- 枚举对象名通常使用全部大写
- 枚举对象根据需要,也可以有多个属性
关键字Enum枚举类
创建步骤
1、使用关键字enum
替代class
2、public static final Season SPRING = new Season("春天","温暖");
直接使用SPRING("春天","温暖")
:常量名(实参列表)
3、如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
4、如果有多个常量(对象),使用,
间隔,最后一个用分号;
5、如果使用enum
来实现枚举类,要求将定义的常量对象,必须写在类的行首
注意事项
-
使用
enum
关键字后就不能继承其他类了,因为enum
会隐式继承Enum类,而java是单继承 -
枚举类 和普通类一样,可以实现接口。
enum 类名 implements 接口1,接口2{}
-
**个人理解:**枚举类就是一个类,里面的枚举对象就是创建好的对象放在里面
public class test {
public static void main(String[] args) {
Color color = Color.RED;
switch (color){
case RED:
color.show();
break;
case BLUE:
color.show();
break;
default:
break;
}
}
}
public interface Show {
public void show();
}
public enum Color implements Show{
RED(255,0,0),BLUE(0,0,255),BLACK(0,0,0),YELLOW(255,255,0),GREEN(0,255,0);
private int redValue;
private int greenValue;
private int blueValue;
Color(int redValue,int greenValue,int blueValue){
this.redValue = redValue;
this.greenValue = greenValue;
this.blueValue = blueValue;
}
@Override
public void show(){
System.out.println("red:"+this.redValue+",green:"+this.greenValue+",blue:"+this.blueValue);
}
}
Enum成员方法
-
toString
:返回当前对象名,子类可以重写 -
name
:返回当前对象名(常量名),子类中不能重写[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hys9ll4h-1623685638670)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611133442555.png)]
-
ordinal
:返回当前对象的位置号,默认从0开始[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWlJZdAG-1623685638672)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611133500709.png)]
-
values
:返回一个数组,包含当前枚举类的所有常量[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hzux4aS-1623685638674)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611133614918.png)]
-
valueOf
:将字符串转换成枚举对象,要求字符串为已有的常量名,否则报异常[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qL4BlON9-1623685638676)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611133158628.png)]
-
comparaTo
:比较两个枚举常量,比较的就是位置号[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEVTtmf1-1623685638677)(C:\Users\stati\AppData\Roaming\Typora\typora-user-images\image-20210611133355050.png)]
例:创建一个枚举类并打印其中的常量对象
public class EnumExercise {
public static void main(String[] args) {
System.out.println("=====遍历枚举=======");
Week[] weeks = Week.values();
for (Week week :weeks){
System.out.println(week);
}
}
}
enum Week{
Monday("星期一"),Tuesday("星期二"),Wednesday("星期三"),Thursday("星期四");
private String name;
private Week(String name) {
this.name = name;
}
@Override
public String toString(){
return name;
}
}
注解
- 用于修饰解释、包、类、方法、属性、构造器、局部变量等数据信息
- 注解不影响程序逻辑,但注解可以编译或运行,相当于嵌套在代码中的补充信息
- 在java SE 中,注解使用目的比较简单,例如标记过时的功能、忽略警告等;在java EE 中,用来配置应用程序的任何切面,代替java EE 旧版本中所遗留的繁冗代码和xml配置等
@override
-
用于限定某个方法,是重写父类方法,该注解只能用于方法
-
如果写了@override,编译器会检查该方法是否真的重写了父类的方法;相当于提醒编译器校验
-
如果没写,如果父类有对应方法,一样的构成重写
@Deprecated
- 用于表示某个程序元素(类、方法)已过时
- 可以修饰类、方法、包、字段、参数
- 用作版本升级过度时使用
@SuppressWarnings
- 抑制编译器警告
- 不希望看到警告时,可以用这个注解来抑制编 译器
- 作用范围:和放置的位置有关
元注解(了解)
- @Retention:用于修饰一个注解,指定该注解可以保留多长时间
-
@Target:用于修饰一个注解,指定被修饰的注解能修饰哪些元素;target包含一个value的成员变量
-
@Documented:用于指定被修饰的注解类将被javadoc工具提取成文档
-
@Inherited:子类会继承被这个注解修饰的注解