java注解

时间:2021-07-26 16:52:58   收藏:0   阅读:0

注解

anno1

package com.ding.anno1;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/24 23:41
 * @Version 1.0
 */
public class Fu {

    public void show(){
        System.out.println("父类的方法");
    }
}

package com.ding.anno1;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/24 23:42
 * @Version 1.0
 */
public class Zi extends Fu {

    @Override//告诉编译器这个方法是重写了父类中的show方法
    public void show(){
        System.out.println("子类的方法");
    }

    @Deprecated//表示这是一个过时的方法
    public void method(){
        System.out.println("过时的方法>>>");
    }

    public void fun(){
        int a=10;
    }
    @SuppressWarnings(value = "all")//压制本方法中所有的警告
    public void fun2(){
        int b=10;
    }

}

anno2

package com.ding.anno2;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/24 23:51
 * @Version 1.0
 */
public @interface Anno1 {
      //定义一个基本类型的属性
    int a() default 12;

    //定义一个String类型的属性
    public String name() default "ding";

    //定义一个Class类型的属性
    public Class clazz() default Anno2.class;

    //定义一个注解类型的属性
    public Anno2 anno() default @Anno2;

    //定义一个枚举类型的属性
    public Season season() default Season.SPRING;

    //int数组
    public int[] arr() default {1,2,3,4,5};

    //枚举数组
    public Season[] seasons() default {Season.SPRING,Season.SUMMER};
}

package com.ding.anno2;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/24 23:52
 * @Version 1.0
 */
public @interface Anno2 {
}

package com.ding.anno2;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:00
 * @Version 1.0
 */
//在使用注解的时候如果注解里面的属性没有指定默认值。
//那么我们就需要手动给出注解属性的设置值。
//@Anno1(name="abc")
@Anno1(a=17)
public class AnnoDemo {

}

package com.ding.anno2;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/24 23:51
 * @Version 1.0
 */
public enum Season {
    SPRING,SUMMER,AUTUMN,WINTER;
}

anno3

package com.ding.anno3;

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

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:06
 * @Version 1.0
 */
//表示Test这个注解的存活时间
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Test {
}

package com.ding.anno3;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:04
 * @Version 1.0
 */
public class UserTest {

    //没有使用Test注解
    public void show(){
        System.out.println("UserTest....show>>>");
    }

    //使用Test注解
    @Test
    public void method(){
        System.out.println("使用了test注解");
    }

}

package com.ding.anno3;

import java.lang.reflect.Method;
/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:08
 * @Version 1.0
 */
public class AnnoDemo {


    public static void main(String[] args) throws Exception{
        //1.通过反射获取UserTest类的字节码文件对象
        Class<?> clazz = Class.forName("com.ding.anno3.UserTest");

        //创建对象
        UserTest userTest = (UserTest) clazz.newInstance();

        //2.通过反射获取这个类里面所有的方法对象
        Method[] Methods = clazz.getDeclaredMethods();
        //3.遍历
        for (Method method : Methods) {
            if(method.isAnnotationPresent(Test.class)){
                method.invoke(userTest);
            }
        }
    }
}

anno4

package com.ding.anno4;

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

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:18
 * @Version 1.0
 */

@Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})//指定注解使用的位置(成员变量,类,方法)
@Retention(RetentionPolicy.RUNTIME)//指定该注解的存活时间
public @interface Anno {

}

package com.ding.anno4;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:21
 * @Version 1.0
 */
@Anno
public class Person {
}

package com.ding.anno4;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:21
 * @Version 1.0
 */

public class Student extends  Person {
    public void show(){
        System.out.println("student.......show..........");
    }
}

package com.ding.anno4;

/**
 * @Description TODO
 * @Author 丁帅帅
 * @Date 21/07/25 00:22
 * @Version 1.0
 */
public class StudentDemo {

    public static void main(String[] args) throws Exception{
        Class<?> clazz = Class.forName("com.ding.anno4.Student");
        Class<?> clazz1 = Class.forName("com.ding.anno4.Person");
        //获取注解
        boolean result = clazz.isAnnotationPresent(Anno.class);
        boolean result1 = clazz1.isAnnotationPresent(Anno.class);
        System.out.println(result);
        System.out.println(result1);
    }
}

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!