枚举&注解

1.枚举类(Enum)

Enum和class , interface是同等地位的

用来定义一组有限个常量的时候经常使用

1.枚举值必须定义在第一行
2.不同值之间用逗号隔开,最后一个以分号结尾

Enum常用方法:
	values()			返回的是枚举类名称的一个数组。
	valueOf("asd")		返回值是名字为asd的枚举对象,没有这个值的话会报错。
	

public class play{
	public static void main(String[] args){
		System.out.println(season.qwe);		等于说是调用了toString,还可以重写这个方法
		season[] values = season.values();
		for(season i : values)
			System.out.println(i);
	}
}
enum season{
	qwe("dong") , asd("nan");
	private String name;
	private season(String string) {
		this.name = string;
	}
}

2.注解(Annotation)

注解就是特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。

@Override				限定重写父类方法,不重写的话就会报错

@Deprecated				表示所修饰的元素已过时,但是还可以使用

@SuppressWarnings("值")		抑制编辑器警告,当有多个的时候,可以用大括号将其括起来
	@SuppressWarnings( "unused" )
	@SuppressWarnings( {"unused" , "rawtypes"} )

	unused		忽略定义值未使用时的警告
	rawtypes	忽略未限制泛型类型时的警告
	boxing		忽略装箱拆箱产生的警告
	all			忽略所有警告


自定义注解

自定义注解必须配上反射,才有意义
@interface Myannocation{
	String value() default "String";
}

元注解
对现有的注解进行标注的注解
学后期框架的时候用的比较多

@Retention("value")		用于修饰一个annotation,用于指定annotation的生命周期,经常用
	value是枚举类RetentionPolicy中的值
		SOURCE 		该注解只保存在源代码(.java)中,编译后不报存在类文件(.class)内
		CLASS		编译器将注解保存在类文件内,范式JVM不会加载这个注解。默认值就是这个
		RUNTIME		记录在类文件内,JVM也会加载,并且可以通过反射获取注解信息
	
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.SOURCE)
@interface Myannocation{
	String value();
}

@Target("value")		用于修饰定义的接口可以试用哪些类型,经常用
需要用大括号括起来

import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Target({ElementType.TYPE , ElementType.FIELD})
@Retention(RetentionPolicy.SOURCE)
@interface Myannocation{
	String value();
}
java.lang.annotation.ElementType内的枚举值
CONSTRUCTOR用于构造方法
FIELD成员变量
LOCAL_VARIABLE局部变量
METHOD方法
PACKAGE
PARAMETER参数声明
TYPE类,接口,枚举
ANNOTATION_TYPE注解声明

@Document		表示被修饰的注解会被javadoc.Java提取成文档
@Inherited		表示父类的注解将被子类继承,不经常用

jdk8新增注解:

@Repeatable()
1.先定义两个自定义注解,a 和 b
2.a内写上@Repeatable(b.class)
3.a和b的元注解必须一致
4.a类的内部是一个正常的String value();
5.b内部是一个a类型数组a[] value();
6.然后a注解就可以多次修饰同一个东西了


@Repeatable(b.class)
@Target({ElementType.TYPE , ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.CLASS)
@interface a{
	String value();
}

@Target({ElementType.TYPE , ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.CLASS)
@interface b{
	a[] value();

调用:
public class play{
	public static void main(String[] args){
	
		@a("nih")
		@a("cnm")		这里a注解可以用多次
		int d = 10;
	}
}

类型注解
使用位置:创建对象,方法参数,类型转换,throws抛异常,implements实现接口等

java.lang.annotation.ElementType内的枚举值
TYPE_PARAMETER表示该注解能写在类型变量的声明语句中(泛型声明)
TYPE_USE表示该注解能写在使用类型的任何语句中
@Target(ElementType.TYPE_PARAMETER)

@interface a{
	String value() defaule "qwe";
}

class test<@a T>{			在内部修饰
	
}
@Target(ElementType.TYPE_USE)

@interface a{
	String value() default "qwe";
}

class test<T>{			在很多地方都能用了
	public void show() throws @a Exception{
		
		ArrayList<@a String> List = new ArrayList<>();
		
		int num = (@a int) 10L; 
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值