1.枚举类的概述
枚举类用关键字enum来修饰,使用枚举类的前提是其对象是有限个。带有enum的枚举类默认实现了Enum接口,故其默认继承了父类的toString方法,因此我们在自己创建的枚举类中若无特别的需求就不要重写toString方法了。当需要定义一组常量时强烈建议使用枚举类。如果枚举类的对象只有一个,则可以作为单例的实现方式
2.枚举类方法的使用
package com.atguigu.java;
public class EnumTest1 {
public static void main(String[] args) {
Season1 autumn = Season1.AUTUMN;
System.out.println(autumn);
System.out.println(Season1.class.getSuperclass());
// 枚举类中的方法
// 1.values()方法
Season1[] values = Season1.values();
for(Season1 season1: values){
System.out.println(season1);
}
// 2.valueOf()方法
Season1 season1 = Season1.valueOf("WINTER");
System.out.println(season1);
season1.show();
}
}
interface info{
void show();
}
enum Season1 implements info{
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("This is a spring");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("This is a summer");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("This is a autumn");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("This is a winter");
}
};
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public void show() {
System.out.println("This is a Season");
}
// @Override
// public String toString() {
// return "Season1{" +
// "seasonName='" + seasonName + '\'' +
// ", seasonDesc='" + seasonDesc + '\'' +
// '}';
// }
}
3.枚举类实现接口
interface info{
void show();
}
enum Season1 implements info{
SPRING("春天","春暖花开"){
@Override
public void show() {
System.out.println("This is a spring");
}
},
SUMMER("夏天","夏日炎炎"){
@Override
public void show() {
System.out.println("This is a summer");
}
},
AUTUMN("秋天","秋高气爽"){
@Override
public void show() {
System.out.println("This is a autumn");
}
},
WINTER("冬天","冰天雪地"){
@Override
public void show() {
System.out.println("This is a winter");
}
};
private final String seasonName;
private final String seasonDesc;
private Season1(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public void show() {
System.out.println("This is a Season");
}
当枚举类实现接口时,如果我们需要枚举类中每个对象重写的方法都不一样的话,我们可以在每个对象的后面重写该方法,如此我们就可以实现不同的对象调用不同的方法。
4.注解的概述
注解就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取并执行相应的处理,通过Annotation程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。在JavaSE中注解的使用比较简单,例如标记过时的功能,抑制编译器的警告等,在JavaEE中,注解占据了重要的位置,例如用来配置应用程序的任何切面,代替旧版本JavaEE遗留的繁冗代码和xml配置
5.注解的使用
5.1 jdk内置的注解
1.@Override:限定重写父类方法,该注解只能用于方法
2.@Deprecated:用于表示所修饰的元素(类,方法)已经过时,通常是因为所修饰的结构危险或存在更好的选择
3. @SuppressWarnings:抑制编译器警告
5.2 自定义注解
5.2.1 格式
可以参照已有的注解的格式来创建自定义注解
package com.atguigu.java;
public @interface MyAnnotation {
String[] value()default {"黄1" ,"黄2"};
}
5.2.2 注意事项
1.注解声明为@interface
2.内部定义成员通常用value表示
3.可以指定成员的默认值,使用default定义
4.如果自定义注解没成员,表示是一个标识作用
6.元注解
6.1 元注解概述
对现有注解进行解释的注解
6.2 元注解举例
@Retention:指定所修饰的Annotation的生命周期,SOURCE\CLASS\RUNTIME(默认行为)只声明为RUNTIME生命周期的注解,才可以通过反射获取
@Target:用于指定被修饰的Annotation能用于哪些程序元素
@Documented:表示被修饰的Annotation在被javadoc解析式可以保留下来
@Inherited:被他修饰的Annotation将具有继承性
6.3 如何获取注解信息
通过反射来获取,调用。前提是此注解的元注解Retention所声明的生命周期为RUNTIME
6.4 JDK8中注解的新特性
可重复注解
类型注解