Day13
1、枚举
package day13;
/*
* 此类演示 枚举
* 1、含义
* 单例模式:一个类对外只提供一个对象
* 枚举:一个类对外提供有限个数的对象
* 2、User username/password/age/name/gender...
* 3、实现枚举
* a、自定义枚举
* 1、将构造器私有化
* 2、对外暴露若干个对象
* 3、不允许外界对提供的对象进行修改,设置为final
* 4、对象的属性值也不能允许更改,将set方法取消
* 5、对象名改为全大写
* b、enum 修饰符
*/
public class Demo1 {
public static void main(String[] args) {
//Gender boy=Gender.girl;
Gender boy=Gender.BOY;
Gender girl=Gender.GIRL;
System.out.println(boy);
System.out.println(girl);
}
}
class Gender{
private String name;
public static final Gender BOY=new Gender("男");//Gender的一个属性
public static final Gender GIRL=new Gender("女");
public Gender(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Gender [name=" + name + "]";
}
}
2、enum枚举类
package day13;
/*
* 此类演示 enum枚举类
* 1、enum创建枚举类
* 语法:enum 类名{
* 对象名(参数列表),对象名(参数列表)...;
* 属性
* get方法
* 构造器
* }
* 2、特点
* a、采用enum修饰的类默认就是枚举类,构造器默认是私有的
* b、枚举类第一行必须是对象的创建
* 只需要写出对象名即可,如果有多个用逗号隔开,如果需要调用有参构造器,需要添加括号传参
* c、显示的创建构造器,必须是私有的
* d、采用enum创建的类默认父类是大写的Enum类
* 3、Enum的常用方法
* toString() 返回对象的对象名
* name() 返回对象的对象名 不能被重写
* ordinal() 返回对象的索引值
* Gender1.values() 静态方法 返回当前枚举类对外提供的所有对象
* Gender1.valueOf("BOY") 静态方法 根据字符串返回和字符串相同名称的对象
*
* 4、Enum去实现接口
* 允许的
* a、和普通类去实现接口的方式一致
* b、枚举类的对象可以对接口中的方法进行单独实现、重写
* 对象名(参数列表){抽象方法的实现}
* BOY("男"){
* public void fly(){
* System.out.println("开心的飞走了");
* }
* }
*
*/
public class Demo2 {
public static void main(String[] args) {
Gender1 boy=Gender1.BOY;
System.out.println(boy.toString());
}
}
enum Gender1{
BOY("男"),GIRL("女");//首行对象的创建
private Gender1(String name) {
this.name=name;
}
private String name;
public String getName() {
return name;
}
public String toString() {
return name;
}
}
3、注解
package day13;
import java.sql.Date;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
/*
* 此类演示 注解(元数据:对元字后面的解释、设置)
* 1、理解
* 元数据(元注解)
* 数据:类、属性、构造器、局部变量
* 位置:数据的上方
* 语法:@单词
* 2、基本的注解
* 1、重写时
* @Override 检测当前方法是否满足重写的条件(只能作用于方法上)
* @Deprecated 标记方法是否过时(过时方法,但功能还在)
* @SupepressWarnings 抑制警告(去掉黄线)
* 2、junit 单元测试 第三方的东西(jdk中没有它的代码)
* a、先将junit工具包引入当前项目
* b、用到的注解
* @Test 方法的单元测试运行注解
* @Before 在每次单元测试方法之前运行
* @After 在每次单元测试方法之后运行
* @BeforeClass 在所有单元测试之前运行一次 修饰的方法必须是static
* @AfterClass 在所有单元测试之后运行一次 修饰的方法必须是static
* 3、自定义注解 写不了任何功能
*
*
*/
public class Demo3 {
public static void main(String[] args) {
int a=0;
System.out.println(a);
Date date=new Date(0);
date.getDate();
}
@BeforeClass
public static void cc() {
System.out.println("beforeClass");
}
@AfterClass
public static void dd() {
System.out.println("AfterClass");
}
@Test
public void test1() {
for (int i = 0; i < 5; i++) {
System.out.println("这是单元测试2");
}
System.out.println("单元测试1");
}
}
class Super{
public void method1() {
}
}
class Sub extends Super{
@Override
public void method1() {
}
@Deprecated
public void fun() {
}
}
4、自定义注解
package day13;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*
* 自定义注解
* 1、步骤
* 1、采用@interface去修饰注解
* 2、添加元注解
* @Retention:保留策略 设置注解的作用时机 需要传递RetentionPolicy参数[SOURCE,CLASS,RUNTIME]
* @Retention(RetentionPolicy.RUNTIME)
* @Target:目标,可以用来修饰什么数据
* 需要传递ElementType类型的数据,可以传递多个
* @Target({ElementType.FIELD,ElementType.TYPE,ElementType.CONSTRUCTOR})
* @Documented:能否在生成的帮助文档中显示
* 3、设置参数 基本数据类型,String,枚举以及上述类型的数组类型
* 语法:类型 参数名() default 值;
* String str();
* int num() default 10;
* double[] ds();数组传递一个参数大括号可以省略
* 传参:@注解名(属性名=属性值)
* @MyAn(str="abc",ds={11,22,333,44})
* 注解中只有一个参数,并且这个参数的属性名是value
*
*/
public class Demo4 {
private String name;
/*public void fun() {
@MyAn
int a=0;
}*/
@MyAn(str="abc",ds=12)
public Demo4() {
}
}
@Target({ElementType.FIELD,ElementType.TYPE,ElementType.CONSTRUCTOR})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAn{
String str();
int num() default 11;
double[] ds();
}
Test代码
package day13;
public class Test1 {
public static void main(String[] args) {
}
}
enum Season1{
SPRING("春天","小春"),SUMMER("夏天","小夏"),AUTUMN("秋天","小秋"),WINTER("冬天","小冬");
private String name;
private String description;
private Season1(String name, String description) {
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
class Season{
private String name;
private String description;
public static final Season SPRING=new Season("春天","小春");
public static final Season SUMMER=new Season("夏天","小夏");
public static final Season AUTUMN=new Season("秋天","小秋");
public static final Season WINTER=new Season("冬天","小冬");
public Season(String name, String description) {
super();
this.name = name;
this.description = description;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
}
package day13;
import java.util.Scanner;
/*
* 声明Week枚举类,其中包含星期一到星期日的定义
* 在TestWeek类中声明方法中printWeek(Week week),根据参数值打印相应的中文星期字符串
* 在main方法中输入一个字符串值,代表星期一到星期日,打印该值对应的枚举值,用此枚举值调用printWeek方法
* 输出中文星期
*/
public class Test2 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入星期几:");
String name=input.next();
Week week = Week.valueOf(name);
System.out.println(week);
printWeek(week);
}
public static void printWeek(Week week) {
switch (week) {
case MONDAY:
System.out.println("星期一");
break;
case TUESDAY:
System.out.println("星期二");
break;
case WEDNESDAY:
System.out.println("星期三");
break;
case THURSDAY:
System.out.println("星期四");
break;
case FRIDAY:
System.out.println("星期五");
break;
case SATURDAY:
System.out.println("星期六");
break;
case SUNDAY:
System.out.println("星期七");
break;
default:
break;
}
}
}
enum Week{
//shift+Ctrl+X 大写 shift+Ctrl+Y 小写
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
转载:https://blog.csdn.net/ddh1314520/article/details/105491494
查看评论