zoukankan      html  css  js  c++  java
  • 28.注解2.md


    目录

    1. 特点

    • 注释:给程序员阅读使用
    • 注解:给编译器阅读使用

    2.优点

    • 简化配置文件
    • 灵活方便

    3. 源注解-部分

    //修饰范围
    @Target({ElementType.TYPE,             //类
             ElementType.FIELD,            //字段
             ElementType.METHOD,           //方法
             ElementType.PARAMETER,        //参数
             ElementType.CONSTRUCTOR,      //构造
             ElementType.LOCAL_VARIABLE})  //局部变量
    //有效范围
    @Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
    @Retention(value = RetentionPolicy.CLASS)  //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
    @Retention(value = RetentionPolicy.RUNTIME)  //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。  
    
    

    4.自定义注解

    • 自定义注解关键字:@interface
    • 注解使用时候注意只能定义方法
    • 注解可以用default来写默认值
    • 注解方法不能有实体
    • 只有一个属性时候可以不写名称
    package per.liyue.code.teset;
    /*
     * 注解的使用
     */
    public @interface MyAn {
        //数字
        int id();
        //字符
        String name();
        //默认值
        String com() default "";
        //默认值
        long time() default 9L;
        //数组
        int[] a();
        //字符串数组
        String[] ss();
        //如果只有一个熟悉,且名字为value时候可以不写名称
        //String value();
    }  
    
    
    package per.liyue.code.teset;
    /*
     * 一个注解的例子
     */
    //注解可以写到这里
    @MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
    public class demo1 {
        //需要将注解内容都写出来
        @MyAn(id=1, name="hah", com="sss", time=8l, a={1, 2}, ss={"aa", "bb"})
        public void Fun(){}
        
        //某些注解使用默认值
        @MyAn(id=1, name="hah", a={1, 2}, ss={"aa", "bb"})
        public void Fun1(){}
        
    }
    

    5.使用注解获

    Demo:

    package per.liyue.code.annotion_demo;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import java.lang.reflect.Field;
    /*
     * 自定义注解
     */
    //修饰范围
    @Target({ElementType.TYPE,             //类
             ElementType.FIELD,            //字段
             ElementType.METHOD,           //方法
             ElementType.PARAMETER,        //参数
             ElementType.CONSTRUCTOR,      //构造
             ElementType.LOCAL_VARIABLE})  //局部变量
    //有效范围
    //@Retention(value = RetentionPolicy.SOURCE) //Annotation只保留在源代码中,编译器直接丢弃这种Annotation。
    //@Retention(value = RetentionPolicy.CLASS)  //编译器把Annotation记录到class文件中,当运行Java程序时候,JVM不能获取Annotation信息,这个是默认值。
    @Retention(value = RetentionPolicy.RUNTIME)  //编译器把Annotation记录到class文件中,当运行Java时,JVM也可以获取Annotation信息,程序可以通过反射获取该Annotation信息。
    public @interface Person {
        int age() default 20;
        String name()    default "叫啥来";
    }
    
    package per.liyue.code.annotion_demo;
    /*
     * 使用注解的类
     */
    public class Employee {
        @Person(age = 30, name = "张三")
        public void funE(){
            
        }
    }
    
    package per.liyue.code.annotion_demo;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.reflect.Method;
    import org.junit.Test;
    /*
     * 获取注解使用注解
     */
    public class UsePerson {
        @Test
        public void Fun() throws NoSuchMethodException, SecurityException, ClassNotFoundException{
            /*
             * 获取注解信息
             */
            //先获取到类
            //Class clazz = Class.forName("per.liyue.code.annotion_demo.Employee");
            Class clazz = Employee.class;
            
            //获取到方法
            Method m = clazz.getMethod("funE");
            
            //获取方法上的注解
            Person p = m.getAnnotation(Person.class);
            
            //输出
            System.out.println("这个员工的年龄:" + p.age() + " 名字:" + p.name());
        }
    }
    
  • 相关阅读:
    蓝牙遥控小车设计(二)——车体搭建和利用串口遥控小车
    WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)
    在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)
    python 任务调度模块sched
    使用__all__限制模块可被导入对象
    python判断任务是CPU密集型还是IO密集型
    使用__slots__限制实例的属性
    使用装饰器获取被调用函数的执行的时间
    python上下文管理器
    http协议以及http1.0和http1.1的区别
  • 原文地址:https://www.cnblogs.com/bugstar/p/8492850.html
Copyright © 2011-2022 走看看