注解:注解是用来告诉编译器,像它传递某种信息,作为一个标记。
一个注解就是一个类,使用注解就相当于创建了类的对象
@SuppressWarnings("deprecation")要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。
@Deprecated //注解说明该方法已过时
@Override //覆盖
@Deprecated //过时
public static void sayHello(){
System.out.println("hi,传智");
}
@SuppressWarnings("deprecation")
public static void main(String[] args) {
// TODO Auto-generated method stub
AnnotationTest.sayHello();
}
@Override
public String toString() {
return "TestDemo []";
}
package cn.itcast.annotation.demo;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/*
* 写一个注解类
*/
//元注解
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotation{
}
package cn.itcast.annotation.demo;
@ItcastAnnotation
public class AnnotationTest {
//
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//检查该类是否调用了注解类
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
//使用反射获取到ItcastAnnotationDemo类对象
ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation);
}
}
@Deprecated
public static void sayHello() {
// TODO Auto-generated method stub
}
}
说明:
@Retention(RetentionPolicy.RUNTIME) 指示注释类型的注释要保留多久。默认是CLASS
CLASS |
RUNTIME |
SOURCE |
以下资料属于网上查找补充:
下面是一个定义注解的实例
- package Test_annotation;
- import java.lang.annotation.Documented;
- import java.lang.annotation.Inherited;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.RetentionPolicy;
- /*
- * 元注解@Target,@Retention,@Documented,@Inherited
- *
- * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
- * ElemenetType.CONSTRUCTOR 构造器声明
- * ElemenetType.FIELD 域声明(包括 enum 实例)
- * ElemenetType.LOCAL_VARIABLE 局部变量声明
- * ElemenetType.METHOD 方法声明
- * ElemenetType.PACKAGE 包声明
- * ElemenetType.PARAMETER 参数声明
- * ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
- *
- * @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
- * RetentionPolicy.SOURCE 注解将被编译器丢弃
- * RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
- * RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
- *
- * @Documented 将此注解包含在 javadoc 中
- *
- * @Inherited 允许子类继承父类中的注解
- *
- */
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- /*
- * 定义注解 Test
- * 注解中含有两个元素 id 和 description
- * description 元素 有默认值 "no description"
- */
- public @interface Test {
- public int id();
- public String description() default "no description";
- }
下面是一个使用注解 和 解析注解的实例
- package Test_annotation;
- import java.lang.reflect.Method;
- public class Test_1 {
- /*
- * 被注解的三个方法
- */
- @Test(id = 1, description = "hello method_1")
- public void method_1() {
- }
- @Test(id = 2)
- public void method_2() {
- }
- @Test(id = 3, description = "last method")
- public void method_3() {
- }
- /*
- * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
- */
- public static void main(String[] args) {
- Method[] methods = Test_1.class.getDeclaredMethods();
- for (Method method : methods) {
- /*
- * 判断方法中是否有指定注解类型的注解
- */
- boolean hasAnnotation = method.isAnnotationPresent(Test.class);
- if (hasAnnotation) {
- /*
- * 根据注解类型返回方法的指定类型注解
- */
- Test annotation = method.getAnnotation(Test.class);
- System.out.println("Test( method = " + method.getName()
- + " , id = " + annotation.id() + " , description = "
- + annotation.description() + " )");
- }
- }
- }
- }