2019-01-22
内容: 枚举, 注解
一, 自定义一个枚举类
- public class TestSeason {
- public static void main(String[] args) {
- Season spring = Season.Spring;
- System.out.println(spring);
- }
- }
- public class Season {
- // 将属性定义为私有常量
- private final String seasonName;
- private final String seasonDes;
- // 将构造器设置为私有的
- private Season (String seasonName, String seasonDes) {
- this.seasonName = seasonName;
- this.seasonDes = seasonDes;
- }
- // 利用构造器构造春夏秋冬四个对象
- public static final Season Spring = new Season("春天","万物复苏");
- public static final Season Summer = new Season("夏天","骄阳似火");
- public static final Season Fall = new Season("秋天","秋高气爽");
- public static final Season Winter = new Season("冬天","白雪皑皑");
- // 因为属性是常量, 所以不能赋值
- public String getSeasonName() {
- return seasonName;
- }
- public String getSeasonDes() {
- return seasonDes;
- }
- // 重写 toString 方法
- @Override
- public String toString() {
- return "Season [seasonName=" + seasonName + ", seasonDes=" + seasonDes + "]";
- }
- }
二, 通过关键字 enum 定义一个枚举类并使用方法
public class TestSeason { public static void main(String[] args) { Season1 spring = Season1.Spring; System.out.println(spring); // 使用 values() 方法将所有对象存入一个数组中 Season1[] season = Season1.values(); for (int i = 0; i < season.length; i++) { System.out.println(season[i]); } // 使用 valueOf(String name) 方法将指定对象名的对象取出来 String name = "Winter"; Season1 winter = Season1.valueOf(name); System.out.println(winter); } } public enum Season1 { Spring("春天","万物复苏"), Summer("夏天","骄阳似火"), Fall("秋天","秋高气爽"), Winter("冬天","白雪皑皑"); private final String seasonName; private final String seasonDes; private Season1 (String seasonName, String seasonDes) { this.seasonName = seasonName; this.seasonDes = seasonDes; } public String getSeasonName() { return seasonName; } public String getSeasonDes() { return seasonDes; } @Override public String toString() { return "Season1 [seasonName=" + seasonName + ", seasonDes=" + seasonDes + "]"; } }
三, 让枚举类实现一个接口, 并且让枚举类的每个对象都重写接口中的抽象方法
public class TestSeason { public static void main(String[] args) { Season1 spring = Season1.Spring; System.out.println(spring); // 使用 values() 方法将所有对象存入一个数组中 Season1[] season = Season1.values(); for (int i = 0; i < season.length; i++) { System.out.println(season[i]); } // 使用 valueOf(String name) 方法将指定对象名的对象取出来 String name = "Winter"; Season1 winter = Season1.valueOf(name); System.out.println(winter); // 调用接口中的方法 spring.Show(); } } public interface Show { void Show(); } public enum Season1 implements Show { Spring("春天","万物复苏"){ @Override public void Show() { System.out.println("春天:"+Spring.toString()); } }, Summer("夏天","骄阳似火"){ @Override public void Show() { System.out.println("夏天:"+Spring.toString()); } }, Fall("秋天","秋高气爽"){ @Override public void Show() { System.out.println("秋天:"+Spring.toString()); } }, Winter("冬天","白雪皑皑"){ @Override public void Show() { System.out.println("冬天:"+Spring.toString()); } }; private final String seasonName; private final String seasonDes; private Season1 (String seasonName, String seasonDes) { this.seasonName = seasonName; this.seasonDes = seasonDes; } public String getSeasonName() { return seasonName; } public String getSeasonDes() { return seasonDes; } @Override public String toString() { return "Season1 [seasonName=" + seasonName + ", seasonDes=" + seasonDes + "]"; } }
四, JDK 常用注释
@Override: 显示表明方法重写
@Deprecated: 表明方法或者类过时, 但依旧可以使用
@SuppressWarnings: 抑制编译器警告, 即不让编译器发出警告
五, 自定义注解
使用 @interface
六, 元注解
释义: 修饰注解的注解
@Retention:* 用来指定某个 Annotation 存在的时间长短
* 使用格式:@Retention(RetentionPolicy. 成员变量)
@Retention(RetentionPolicy.SOURCE) 表明该注释在编译时不会保留
@Retention(RetentionPolicy.CLASS) 表明在编译时被记录在. class 文件中, 运行不会保留, 这是默认值
@Retention(RetentionPolicy.RUNTIME) 表明在编译时被记录在. class 文件中, 运行时也保留, 程序可以通过反射获取该注释
@Target:* 用来指定某个 Annotation 能修饰的地方, 默认是所有地方都能修饰
* 使用格式 @Target(地方), 地方可以是 FIELD,METHOD,CONSTRUCTION,TYPE,LOCAL_VARIABLE,PACKAGE,PARAMETER,ANNOTATION_TYPE 中的任意个
@Documented:* 用来指定某个 Annotation 在生成文档的时候会被保留
* 格式:@Documented
@Inherited:* 用来指定某个 Annotation 具有继承性
来源: http://www.bubuko.com/infodetail-2930283.html