枚举类
package chapter12; public class Enumeration01 { public static void main(String[] args) { Season season = new Season("春天", "温暖"); Season winter = new Season("冬天", "寒冷"); //不能体现季节是4个固定的对象 //枚举类:把具体对象一个个例举出来的类 } } class Season{ private String name; private String desc; public Season(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }
package chapter12; //演示定义枚举实现 public class Enumeration02 { public static void main(String[] args) { System.out.println(Season2.SPRING); System.out.println(Season2.WINTER); } } class Season2{ private String name; private String desc; //枚举对象通常大写,根据需要可有多个属性 public static Season2 SPRING=new Season2("春天","温暖"); public static Season2 WINTER=new Season2("冬天","寒冷"); //构造器私有化,防止直接new //去掉set,防止属性修改 //Season内部创建固定对象,限定了对象个数 //优化:可以加final修饰符(因为static会导致season类加载) private Season2(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season2{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
package chapter12; public class Enumeration03 { public static void main(String[] args) { System.out.println(Season3.SPRING); System.out.println(Season3.WINTER); System.out.println(Season3.What); } } //使用enum关键字实现枚举类 enum替代class // public static Season2 SPRING=new Season2("春天","温暖");直接用 SPRING("春天","温暖") //若有多个常量对象,直接用,隔开 要放最前面 enum Season3{ SPRING("春天","温暖"),WINTER("冬天","寒冷"),What;//调用无惨构造 What() private String name; private String desc; private Season3(String name, String desc) { this.name = name; this.desc = desc; } Season3() { } public String getName() { return name; } public String getDesc() { return desc; } @Override public String toString() { return "Season3{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } }
package chapter12; public class EnumDetail { public static void main(String[] args) { Music.CLASSICMUSIC.playing(); } } interface IPlaying{ public void playing(); } enum Music implements IPlaying{ CLASSICMUSIC;// public static Music CLASSICMUSIC =new Music();直接用 CLASSICMUSIC() //是Music的对象 可调用其方法 @Override public void playing() { System.out.println("播放"); } }
package chapter12; public class EnumExercise01 { public static void main(String[] args) { Gender2 boy = Gender2.BOY; Gender2 boy2 = Gender2.BOY; Gender2 girl = Gender2.GIRL; System.out.println(girl); System.out.println(boy);//输出BOY,本质就是调用Gender2父类 /*Enum的toString() public String toString(){ return name; } */ System.out.println(boy==boy2); } } enum Gender2{ BOY,GIRL; }
package chapter12; public class EnumExercise02 { public static void main(String[] args) { Week[] values = Week.values(); for (Week week:values) { System.out.println(week); } } } enum Week{//不能再继承,已有隐式继承 MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期天"); private String day; Week(String day) { this.day = day; } @Override public String toString() { return day; } }
package chapter12; import jdk.internal.org.objectweb.asm.tree.analysis.Value; //演示类的各方法使用 public class EnumMethod { public static void main(String[] args) { //使用Season2 枚举类 演示各种方法 //SPRING("春天","温暖"),WINTER("冬天","寒冷"),What; Season3 spring = Season3.SPRING; System.out.println(spring.name());//输出对象名字 System.out.println(spring.ordinal());//输出的枚举对象编号 Season3[] values = Season3.values(); for (Season3 season: values) {//增强for循环 System.out.println(season);//遍历取出枚举对象 } int []nums={1,2,9}; for (int i = 0; i < nums.length ; i++) {//普通for循环 System.out.println(nums[i]); } for (int i:nums){//增强for,依次从nums数组中取出数据赋给i,取出完毕则退出for System.out.println("i="+i); } Season3 winter = Season3.valueOf("WINTER");//valueOf 将字符串数组转换成枚举对象,要求只能为已有常量,否则异常 Season3 spring1 = Season3.valueOf("SPRING"); System.out.println(winter); System.out.println(spring==spring1);//valueOf 找到的 是同一对象 System.out.println(Season3.WINTER.compareTo(Season3.SPRING));//把两者枚举对象编号相减,前-后 } }
Override注解
package chapter13; //Override注解不能修饰类,包 //Target 修饰注解的注解 元注解,指定注解在哪使用 public class Override { public static void main(String[] args) { } } class Father{ public void fly(){ System.out.println("Father fly..."); } } class Son extends Father{ @java.lang.Override /* 1 放在fly方法上,表示子类的fly方法时重写了父类fly 2 没写Override 也表示重写 3 写了Override注解 编译器就会检查该方法是否真的重写了父类,若没构成重写会报错 4 @interface 表示注解类 */ public void fly() { System.out.println("Son fly..."); } }
Deprecated注解
package chapter13; //表示某个程序元素过时,Deprecated,修饰方法,类,字段,包,参数等 //也可作为新旧版本兼容过渡 public class Deprecated { public static void main(String[] args) { A a = new A(); System.out.println(a.n1);//10 } } @java.lang.Deprecated //表示类过时了,但还能用 class A{ @java.lang.Deprecated public int n1=10; public void hi(){ } }
SuppressWarnings 注解
package chapter13; import java.util.ArrayList; public class SuppressWarnings { //当不希望看到警告时候,可以用SuppressWarnings注解抑制警告 //可写入不显示警告信息 all所有警告 unchecked没有检查的警告 rawtypes没有指定泛型警告 unused没有用某个变量 //作用范围是它下边,放类上范围最大 @java.lang.SuppressWarnings({"unchecked","rawtypes","unused"}) public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("jack"); list.add("tom"); list.add("mary"); int i; System.out.println(list.get(1)); } }
四种元注解