有关注解

1、所有的注解都是类
2、所有注解类都默认是Annotation接口的子类
3、定义方式:
	public @interface SomeAnnotation{
		
	}
4、可以注解的位置
	类上
	方法上
	成员变量上
	返回值上
	参数上
	局部变量上
import org.junit.Test;
@MyTest
public class RunTest {
	@MyTest
	private int age;
	@MyTest()
	public void tt(@MyTest()int a){
		@MyTest
		int xx=0;
	}
}
5、如果定义了一个注解之后,没有说明这个注解可以注解的位置,则这个注解就可以注解到所有位置上
可以通过另一个注解,来限制自定义的注解的注解可以注解的位置

以下定义某个注解只可以注解到方法上:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
//设定注解可以注解的位置
@Target(value={ElementType.METHOD})
public @interface MyTest {

}

6:用途
	6.1:在编译时起到限制的作用.
	public class MyServlet extends HttpServlet {
	@Override
	public void doGet(ServletRequest req,String name)
			throws ServletException, IOException {
	}
[因为父类中没有这个方法所以添加了@Overried以后,就会编译出错。]}

	6.2:在运行时组反射使用
		所有类的字节码Class,Method,Field,Constractor都拥有一个方法:
	boolean	isAnnotationPresent(Class<? extends Annotation>?annotationClass) 
如果指定类型的注解存在于此元素上,则返回 true,否则返回 false。
注解存在的范围:
	一个类:Retention,用于定义注解存在的策略:
	java.lang.annotation 
枚举 RetentionPolicy
三个常量:
CLASS 
??????????编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。 在.class存在,在运行时擦除
RUNTIME 
??????????编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。运行时存在。
SOURCE 
??????????编译器要丢弃的注释。只在.java文件中存在@Overied

以下是经常使用的标准定义:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)[指定在运行存在。]
@Target(value={ElementType.METHOD})[注解的位置。]
public @interface MyTest {

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值