zoukankan      html  css  js  c++  java
  • 注解

    一、注解

      1、什么是注解?

        注解是一种代码级别的声明。在jdk1.5中引入,和类、接口属于同一层次,可以作用在包,类,字段,方法,局部变量和方法参数上,用来对这些元素进行说明、注释。

      2、方法作用的分类

        (1)、代码分析

        (2)、编译检查

        (3)、编写文档

      3、注解的分类

        3.1jdk内置注解

          @override@Deprecated@supresswarnings(有参数)

        3.2自定义注解

          Ⅰ、格式:     

    【元注解】
    public @interface 注解名称{}
    

            Ⅱ、本质

        注解本质上就是一个接口,默认继承annotation接口

    public @interface xxx extends public.lang.annotation.Annotation{}
    

           Ⅲ、属性

        (1)特点:属性就是接口中的抽象方法,方法的返回值包括:

                      基本数据类型、String、枚举、类,以及异常类型的数组类型

        (2)注意:声明了属性,在使用时就要进行赋值

            ::如果只有一个属性,并且属性名是value,那么赋值时就可以省略属性

            ::如果属性是数组类型,写一个值时不用写[]

            ::如果定义属性时,使用default关键字给属性赋值后,在使用时可以不给属性赋值

    自定义注解:

    /**
     * @Description: 自定义注解
     * @ClassName: Anno
     * @Author: 橙汁one
     * @Date: 2021/3/11 20:55
     * @Version: 1.0
     */
    public @interface Anno {
        //属性
        int age();
        String name();
        AnyOne anyone();
    }
    View Code

    声明的类型:

    /**
     * @Description: 枚举类型
     * @ClassName: AnyOne
     * @Author: 橙汁one
     * @Date: 2021/3/11 20:57
     * @Version: 1.0
     */
    public enum AnyOne {
        a,b,c
    }
    View Code

    测试类:

    /**
     * @Description: 测试类
     * @ClassName: People
     * @Author: 橙汁one
     * @Date: 2021/3/11 20:58
     * @Version: 1.0
     */
    @Anno(age=12,name = "jj",anyone = AnyOne.a)
    public class People {
        private int dd;
    }
    View Code

        3.3、元注解

          定义:所谓元注解就是声明其他注解的注解

          元注解包括:

          @Target():用于约束被声明的注解可以用在什么地方,类?包?方法?、、、、

                    type:类或接口、field:参数、method:可用于方法声明

          @Retention():用于约束被声明注解的声明周期,可以保留在什么阶段。

                    source:源代码阶段,class:class文件阶段,runtime:运行阶段

          @Documented:描述注解是否可以被抽取到api文档中

    /**
     * @Description: 自定义注解
     * @ClassName: Anno
     * @Author: 橙汁one
     * @Date: 2021/3/11 20:55
     * @Version: 1.0
     */
    @Target(ElementType.FIELD)//约束Anno可以用于声明属性
    @Retention(RetentionPolicy.RUNTIME)//约束Anno的生命周期在运行时
    @Documented
    public @interface Anno {
        //属性
        int age();
        String name();
        AnyOne anyone();
    }
    View Code

         3.4解析注解

          定义:解析注解一般情况就是通过反射来获取类、方法、属性上的注解。自己定义注解实现什么功能

        个人理解:注解是位于功能类(完成一些功能)和使用类(使用功能类的地方)中间一层的东西,通过注解可以很方便为使用提供参数,这里的参数就hi是功能类或者是其他的一些东西

          实例:

      自定义注解:

    /**
     * @Description: 自定义注解
     * @ClassName: Anno
     * @Author: 橙汁one
     * @Date: 2021/3/11 21:22
     * @Version: 1.0
     */
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Anno {
        String classname();//全类名
        String methodname();//类中方法名
    }
    View Code

      功能类:

    /**
     * @Description: 功能类
     * @ClassName: People
     * @Author: 橙汁one
     * @Date: 2021/3/11 21:24
     * @Version: 1.0
     */
    public class People {
        public void speak(){
            System.out.println("hahhahahhahahhah");
        }
    }
    View Code

      测试类:

    /**
     * @Description: 测试类
     * @ClassName: DemoTest
     * @Author: 橙汁one
     * @Date: 2021/3/11 21:25
     * @Version: 1.0
     */
    @Anno(classname = "com.fy.demo.demo3.People",methodname = "speak")
    public class DemoTest {
        public static void main(String[] args) throws Exception {
    //        通过反射获取注解中的参数
    //        获取该类的字节码文件
            Class<DemoTest> dt=DemoTest.class;
    //        获取上边的注解对象
            Anno anno = dt.getAnnotation(Anno.class);
    //        获取注解中的属性
            String classname = anno.classname();
            String methodname = anno.methodname();
    //        将类加载进内存
            Class<?> aClass = Class.forName(classname);
    //        创建类对象
            Object o = aClass.newInstance();
    //         根据方法名获取方法对象
            Method method = aClass.getMethod(methodname);
    //        方法执行
            method.invoke(o);
        }
    }
    View Code

    二、泛型

      1、概述:泛型实质上参数化类型,就是所操作的类型定义为一个参数。泛型可以用来类、接口、方法上

        所谓泛型,就是指在类创建时不指定类中属性的参数类型,在外部操作或者实例化时才确定参数类型。

      2、优点:

        类型安全、消除强制转换类型、潜在的性能收益

  • 相关阅读:
    MySQL性能指标及计算方法(go)
    Flashback for MySQL 5.7
    oracle_外部表的两种实现方式oracle_loader[datapump]
    oracle数据库内存调整之增加内存
    Leetcode: Binary Tree Paths
    Leetcode: Verify Preorder Sequence in Binary Search Tree
    Leetcode: Meeting Rooms II
    Leetcode: Meeting Rooms
    Leetcode: Flatten 2D Vector
    Leetcode: Count Univalue Subtrees
  • 原文地址:https://www.cnblogs.com/fbbg/p/14520605.html
Copyright © 2011-2022 走看看