1.枚举
1.枚举的概述
-
枚举对应英文(enumeration,简写 enum)
-
枚举是一组常量的集合
-
枚举属于一种特殊的类,里面只包含一组有限的特定的对象
-
不需要提供 setXxxx() 方法,因为枚举对象值通常为只读
-
对枚举对象/属性使用 static+final 共同修饰
-
枚举对象名通常使用全部大写,与常量的命名规范一样
-
枚举对象根据需要,也可以有多个属性
2.枚举的定义格式
public enum s{
枚举项1,枚举项2,枚举项3;
}
例:
public enum Seas{
SPRING,SUMMER,AUTUMN,WINTER;
}
3.枚举的特点
4.枚举的方法
方法名 | 说明 |
String name() | 获取枚举项的名称 |
int ordinal() | 返回枚举项在枚举类的索引值 |
int compare To(E o) | 比较两个枚举项,返回的是索引值的差 |
String toString() | 返回枚举常量的名称 |
static <T> T valueOF(Class<T> type,String name) | 获取指定枚举类中的指定名称的枚举值 |
values() | 获得所有枚举项 |
例:
枚举类:
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER;
}
测试类:
public class EnumDemo {
public static void main(String[] args) {
// String name() 获取枚举项的名称
String name=Season.SPRING.name();
System.out.println(name);//SPRINT
System.out.println("-------------------");
// int ordinal() 返回枚举项在枚举类的索引值
int index1=Season.SPRING.ordinal();
int index2=Season.SUMMER.ordinal();
int index3=Season.AUTUMN.ordinal();
int index4=Season.WINTER.ordinal();
System.out.println(index1);//0
System.out.println(index2);//1
System.out.println(index3);//2
System.out.println(index4);//3
System.out.println("-------------------");
// int compare To(E o) 比较两个枚举项,返回的是索引值的差
int result=Season.SPRING.compareTo(Season.WINTER);
System.out.println(result);//-3
System.out.println("-----------------");
// String toString() 返回枚举常量的名称
String s=Season.SPRING.toString();
System.out.println(s);//SPRING
System.out.println("------------------");
// static <T> T valueOF(Class<T> type,String name) 获取指定枚举类中的指定名称的枚举值
Season spring=Enum.valueOf(Season.class,"SPRING");
System.out.println(spring);//SPRING
System.out.println("------------------");
// values() 获得所有枚举项
Season[] values=Season.values();
for (Season value : values) {
System.out.println(value);
/* SPRING
SUMMER
AUTUMN
WINTER*/
}
}
}
2.注解
1.注解的概述
Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称为元数据)
Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能
注解的作用
1.生成文档这是最常见的,也是java 最早提供的注解;
2.在编译时进行格式检查,如@Override放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出
3.跟踪代码依赖性,实现替代配置文件功能,比较常见的是spring 2.5 开始的基于注解配置,作用就是减少配置;
4.在反射的 Class, Method, Field 等函数中,有许多于 Annotation 相关的接口,可以在反射中解析并使用 Annotation。
例:
2.自定义注解
用户可以根据自己的需求定义注解
例:
public enum Season {
SPRING,SUMMER,AUTUMN,WINTER;
}
public @interface Anno1 {
//定义一个基本类型的属性
int a () default 23;
//定义一个String类型的属性
public String name();
//定义一个class类型的属性
public Class clazz() default Anno2.class;
//定义一个注解类型的属性
public Anno2 anno() default @Anno2;
//定义一个枚举类型的属性
public Season season() default Season.SPRING;
//以上类型的一维数组
//int数组
public int [] arr() default {1,2,3,4,5};
//枚举数组
public Season[] seasons() default {Season.SPRING,Season.SUMMER};
}
public @interface Anno2 {
}
//在使用注解的时候如果注释里面的属性没有指定默认值
//那么我们就需要动手给出注解属性的设置值
@Anno1(name = "迪迦")
public class AnnoDemo {
}
注:value:后期我们在使用注解时,如果我们只需要给注解的value属性赋值,那么value就可以省略
3.元注解
例:
package myanno;
import java.lang.annotation.*;
@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD}) //指定注解使用位置(成员变量,类,方法)
@Retention(RetentionPolicy.RUNTIME) //指定该注解的存活时间
@Inherited //指定该注解可以被继承
public @interface Anno {
}
package myanno;
@Anno
public class Person {
}
package myanno;
public class Student extends Person{
public void show(){
System.out.println("student.....show......");
}
}