枚举与注解
一、枚举类的构建与枚举对象的应用:
1、枚举类的特性是具有有限个对象(如月份、季节…),单例模式可以看作是枚举的特殊(即只有一个对象的类)。
枚举类型的不可以加set方法;枚举类是私有的,枚举类的对象必须在类内造,在类外不可以造对象;
2、自定义枚举类:
package com.atguigu.enumera;
public class TestSeason {
public static void main(String[] args) {
//输出
Season spring=Season.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
System.out.println();
}
}
//枚举类
class Season{
//1、提供类的属性,声明为private final;以后不能再被修改。
private final String seasonName;
private final String seasonDesc;
//2、声明为final的属性,在构造器中初始化
private Season(String seasonName,String seasonDesc) {
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
public void show() {
// TODO Auto-generated method stub
System.out.println("这是一个季节。");
}
//3、通过公共的方法来调用属性
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
//4、创建枚举类的对象,一旦造出之后拒绝修改。
public static final Season SPRING=new Season("spring","春暖花开");
public static final Season SUMMER=new Season("summer","夏日炎炎");
public static final Season AUTUMN=new Season("autumn","秋高气爽");
public static final Season WINTER=new Season("winter","白雪皑皑");
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
}
}
3、使用enum定义枚举类:
(1)、枚举类:
使用enum定义枚举类,必须把声明的对象放在最上边;
enum Season implements info{ //实现接口一定要重写抽象方法。
//原型 public static final Season SPRING=new Season("spring","春暖花开");
// SPRING("spring","春暖花开"), //逗号
//重写show()方法;使用enum定义枚举类,必须把声明的对象放在最上边;
/* 枚举类定义的4个对象 */
SPRING("spring","春暖花开"){
public void show() {
System.out.println("春天在哪里");
}
},
SUMMER("summer","夏日炎炎"){
public void show() {
System.out.println("生如夏花");
}
},
AUTUMN("autumn","秋高气爽"){
public void show() {
System.out.println("秋天适合分手");
}
},
WINTER("winter","白雪皑皑"){
public void show() {
System.out.println("冬天里的一把火");
}
};
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName,String seasonDesc) {
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
}
}
TestSeason总代码:
1、如何自定义枚举类AA。枚举类:类的对象是有限个的,确定的。
1-1、私有化类的构造器,保证不能在类的外部创建其对象
1-2、在类的内部创建枚举类的实例。声明为:public static final
1-3、若类有属性那么属性声明为:private final。此属性在构造器中赋值。
package com.atguigu.enumera;
/*
* 一、枚举类:
* 1、如何自定义枚举类
* 2、如何使用enum关键字定义枚举类
* >常用的方法:values()、valuesOf(String name);
* >如何让枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同.<--(相当于让每一个对象都重写抽象方法)
* */
public class TestSeason {
public static void main(String[] args) {
//输出
Season spring=Season.SPRING;
System.out.println(spring);
spring.show();
System.out.println(spring.getSeasonName());
System.out.println();
Season[] seasons=Season.values();
//1、values():可以将枚举类下边的对象以数组的形式返回。
for(int i=0;i<seasons.length;i++) {
System.out.println(seasons[i]);
}
//2、valueOf(String name):写入的是一个字符串,此方法可以将叫这个字符串名字的对象返回。
String str="WINTER";
Season sea=Season.valueOf(str);
System.out.println(sea);
Thread.State[] states=Thread.State.values();
for(int i=0;i<states.length;i++) {
System.out.println(states[i]);
}
sea.show();
}
}
interface info{
void show();
}
//枚举类
enum Season implements info{ //实现接口一定要重写抽象方法。
//原型 public static final Season SPRING=new Season("spring","春暖花开");
/* 枚举类定义的4个对象 */
// SPRING("spring","春暖花开"), //逗号
//重写show()方法
SPRING("spring","春暖花开"){
public void show() {
System.out.println("春天在哪里");
}
},
SUMMER("summer","夏日炎炎"){
public void show() {
System.out.println("生如夏花");
}
},
AUTUMN("autumn","秋高气爽"){
public void show() {
System.out.println("秋天适合分手");
}
},
WINTER("winter","白雪皑皑"){
public void show() {
System.out.println("冬天里的一把火");
}
};
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName,String seasonDesc) {
this.seasonName=seasonName;
this.seasonDesc=seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
}
}
二、基本的注解(Annotation):
注解:
* 1、JDK提供的常用的注释
* @Override:限定重写父类方法,该注释只能用于方法
* @Deprecated:用于表示某个程序元素(类,方法等)已过时
* @SuppressWarnings:抑制编译器警告
* 2、如何自定义一个注解
* 3、元注解
1、加了@Deprecated后会打一个横线;尽量避免使用有@Deprecated的。 会有感叹号的样子,
去掉叹号的解决方法:鼠标放在黄色波浪线上,在显示的条列中点击”Add @SuppressWarnings………”
效果:
问题描述:下面如果不把 System.out.println(i); 注释掉i没错,若把System.out.println(i); 注释掉,会有i下方黄色感叹号,为了解决用注解
代码: int i=10;
// System.out.println(i);
三、自定义注解_元注解(Annotation):
1、自定义一个注解:(系统中的书写格式)仿照SuppressWarnings写
(1)、自定义的注解与使用自定义注解:
项目名 ----- 右击 ----- new ----- Annotation
package com.atguigu.enumera;
/*
* 自定义的注解
* */
public @interface MyAnnotation {
String value() default "hello";
}
(2)、使用:
@MyAnnotation(value="atguigu")
class Student extends Person{
…………………………………………
}
2、元注解:
String name=”atguigu”;//理解:String name可以理解为修饰“atguigu”的元数据。