飞道的博客

javaSE复习Day13(枚举、注解)

465人阅读  评论(0)

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场