1.枚举类
就是一个类的对象是有限的且是固定的。
2.自定义枚举类(如:季节类,只有4个对象,不可更改)
class Season{
//3.属性也不可更改。加final修饰
final String NAME;
final String DESC;
//1.因为对象是有限的,外部不能直接创建,可以私有化构造器
private Season(String name,String desc){
NAME=name;
DESC=desc;
}
//2.外部不能直接创建对象,可以提供一个静态的常量的属性对象
//使用static final修饰
static final Season SPRING = new Season("春天", "春风又绿江南岸");
static final Season SUMMER = new Season("夏天", "映日荷花别样红");
static final Season AUTUMN = new Season("秋天", "秋水共长天一色");
static final Season WINTER = new Season("冬天", "窗含西岭千秋雪");
}
//在使用的时候,通过类名.静态成员
Season season = Season.SUMMER;
3.使用系统定义的枚举类
使用enum关键字定义枚举类
枚举类和普通类的区别:
使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
枚举类的构造器只能使用 private 访问控制符
枚举类的所有实例必须在枚举类中显式列出(, 分隔 ; 结尾). 列出的实例系统会自动添加 public static final 修饰
enum Season{
//2.枚举值得声明(创建枚举类的对象),必须放在第一行
SPRING("春天","春风又绿江南岸"), //public static final Season SPRING = new Season("春天","春风又绿江南岸");
SUMMER("夏天","映日荷花别样红"), //public static final Season SUMMER = new Season("夏天", "映日荷花别样红");
AUTUMN("秋天","秋水共长天一色"),
WINTER("冬天","窗含西岭千秋雪");
//3.属性也不可更改。加final修饰
final String NAME;
final String DESC;
//1.枚举类的构造器的权限修饰符必须为private
private Season(String name,String desc){
NAME=name;
DESC=desc;
}
}
4.枚举类的方法
values():返回所有的枚举值组成的数组,可以遍历枚举值
Season[] seasons = Season.values();
for(Season s : seasons){
System.out.println(s);
}
valueOf(Class enumType,String name):可以通过String的name找到对应的枚举值.enumType:哪个枚举类,name:枚举值的名字
String s = "WINTER";
Season season = Season.valueOf(Season.class, name);
System.out.println(season);
5.枚举类实现接口
interface Info{
String getInfo(); //public abstract String getInfo();
}
enum Season implements Info{
SPRING("春天","春风又绿江南岸"), //public static final Season SPRING = new Season("春天","春风又绿江南岸");
SUMMER("夏天","映日荷花别样红"), //public static final Season SUMMER = new Season("夏天", "映日荷花别样红");
AUTUMN("秋天","秋水共长天一色"),
WINTER("冬天","窗含西岭千秋雪");
final String NAME;
final String DESC;
private Season(String name,String desc){
NAME=name;
DESC=desc;
}
@Override
public String getInfo() {
switch (this) {
case SPRING:return "A";
case SUMMER:return "B";
case AUTUMN:return "C";
case WINNER:return "D";
}
return null;
}
}
或
enum Season implements Info{
SPRING("春天","春风又绿江南岸"){
@Override
public String getInfo() {
return "A";
}
},
SUMMER("夏天","映日荷花别样红"){
@Override
public String getInfo() {
return "B";
}
},
AUTUMN("秋天","秋水共长天一色"){
@Override
public String getInfo() {
return "C";
}
},
WINTER("冬天","窗含西岭千秋雪"){
@Override
public String getInfo() {
return "D";
}
};
final String NAME;
final String DESC;
private Season(String name,String desc){
NAME=name;
DESC=desc;
}
}
1.注解(Annotation):
Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用 Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息.
Annotation 可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量的声明
2.基本的注解
使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用
三个基本的 Annotation:
@Override: 限定重写父类方法, 该注释只能用于方法
@Deprecated: 用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings: 抑制编译器警告.
3.自定义注解
使用@interface定义注解
Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.
@interface MyAnnotation{
//注解中可以定义成员变量,就像定义接口中方法那样
//定义不带默认值得成员变量
String name();
int age();
//定义带默认值得成员变量,使用关键字default
String school() default "清华";
}
使用:
不带默认值的必须赋值,而带默认值得赋值是可选的
@MyAnnotaction(name="AA",age=12)
class Person{
@MyAnnotaction(name="AA",age=12,school="北大")
public void walk(){}
}
4.提取Annotation的信息(反射的时候会讲解)
5.jdk的元注解
元注解:修饰注解的注解,为元注解
@Retention:这个注解只能修饰注解的定义.
修饰的注解代表着注解的存活时间
@Target: 用于修饰 Annotation 定义,
用于指定被修饰的 Annotation 能用于修饰哪些程序元素.
//表示该注解可以存活到运行时
@Retention(RetentionPolicy.RUNTIME)
//表示该注解可以修饰类,属性和方法
@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@interface MyAnnotation{
}
java 枚举
最新推荐文章于 2024-07-27 13:31:57 发布