注解作用是与编译器进行交涉的类,它可以可以加在包,类,字段,方法,方法的参数以及局部变量上。
JDK提供的注解:
@Override
这个相信我们以前常常用到的吧,它就是用来告诉我们是重载了父类的某个方法的。
@Deprecated
当某个方法我们往后不想用了,但是如果删掉的话会带来很多麻烦(例如原先使用这个方法的人用不了这个方法了),所以我们加上@Deprecated标注,在后来的朋友用的时候就知道这个已经过时了,以后可能会慢慢不用,就可以尽量绕过去了。
@SuppressWarnings
通过这个注解我们可以让编译器不去报我们知道的肯定会报的某些警告,免得看了闹心,呵呵。
注解应用:
以上是最基础的,下面我们看下开发中如何去使用注解。注解和枚举一样,其实它是一个类
注解类定义
@interface A
{
}
要使用我们定义的那个注解的类这样定义
@A
class B
{
}
如果我们要反射B类,需要这样定义
class C
{
B.class.isAnnotionPresent(A.class);
A a = B.class.getAnnotion(A.class);
}
注解的生命周期:java源文件-->class文件-->内存中的字节码。
Retention指定生命周期,可以指定是Source class 和 runtime与上面分别对应。
例如:Override Deprecated SuppressWarnings都是在源程序阶段的
跑一个自己定义的注解先:
定义注解:AnnotationTest
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface AnnotationTest {
String color() default "black";
String value();
}
定义反射中使用注解类 Test
import java.lang.annotation.Annotation;
@SuppressWarnings("deprecation")
@AnnotationTest(color = "red",value ="abc")
class Test
{
@SuppressWarnings("unchecked")
@AnnotationTest(color = "red",value ="abc")
public static void main(String[] args)
{
System.runFinalizersOnExit(true);
if(Test.class.isAnnotationPresent(AnnotationTest.class))
{
AnnotationTest annotation = Test.class.getAnnotation(AnnotationTest.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
}
}
}
JDK提供的注解:
@Override
这个相信我们以前常常用到的吧,它就是用来告诉我们是重载了父类的某个方法的。
@Deprecated
当某个方法我们往后不想用了,但是如果删掉的话会带来很多麻烦(例如原先使用这个方法的人用不了这个方法了),所以我们加上@Deprecated标注,在后来的朋友用的时候就知道这个已经过时了,以后可能会慢慢不用,就可以尽量绕过去了。
@SuppressWarnings
通过这个注解我们可以让编译器不去报我们知道的肯定会报的某些警告,免得看了闹心,呵呵。
注解应用:
以上是最基础的,下面我们看下开发中如何去使用注解。注解和枚举一样,其实它是一个类
注解类定义
@interface A
{
}
要使用我们定义的那个注解的类这样定义
@A
class B
{
}
如果我们要反射B类,需要这样定义
class C
{
B.class.isAnnotionPresent(A.class);
A a = B.class.getAnnotion(A.class);
}
注解的生命周期:java源文件-->class文件-->内存中的字节码。
Retention指定生命周期,可以指定是Source class 和 runtime与上面分别对应。
例如:Override Deprecated SuppressWarnings都是在源程序阶段的
跑一个自己定义的注解先:
定义注解:AnnotationTest
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface AnnotationTest {
String color() default "black";
String value();
}
定义反射中使用注解类 Test
import java.lang.annotation.Annotation;
@SuppressWarnings("deprecation")
@AnnotationTest(color = "red",value ="abc")
class Test
{
@SuppressWarnings("unchecked")
@AnnotationTest(color = "red",value ="abc")
public static void main(String[] args)
{
System.runFinalizersOnExit(true);
if(Test.class.isAnnotationPresent(AnnotationTest.class))
{
AnnotationTest annotation = Test.class.getAnnotation(AnnotationTest.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
}
}
}