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());
        }
    }
    
  • 相关阅读:
    后台返回null iOS
    iOS代码规范
    没落的公司 该何去何从
    定位框一闪而过 iOS Swift
    根据appid跳到App Store某个APP的详情页
    Analyze 静态分析内存泄漏代码优化 instrument之Xcode
    bugly手动上传符号表和自动上传符号表
    __null_unspecified属性关键字解决内存泄漏
    栅栏函数dispatch_barrier_sync/async
    cell左滑加删除置顶功能 iOS
  • 原文地址:https://www.cnblogs.com/bugstar/p/8492850.html
Copyright © 2011-2022 走看看