注解

注解的概念

注解可以简化大量操作,一般情况下,如果想封装框架,自己封装一些东西,都离不开注解

注解:一种代码级别的说明。是JDK1.5以后版本引入的一个特性,与类,接口,是同一个层次,可以声明在包,类,字段,方法,局部变量,方法参数等的面前,用来对这些元素进行说明,注释。简化代码

作用分类:

  1. 编写文档:通过代码里标识的注释生成文档
  2. 代码分析:通过代码里表示的注释对代码进行解析
  3. 编译检查:通过对代码里的标识的注释让编译器能够实现基本的编译检查@override

注释的分类

1.内置注解

@Override 检查方法是否重写父类的方法

@Deprecated 声明该方法已经是过时的方法

@SuppressWarnings(“all”) 干掉警告

2.自定义注释

创建一个Annotation注释类

本质接口

该类就是接口;继承了Annotation接口

返回值数据类型

  1. 基本数据类型

    byte、short、int、long、float、double、Boolean、char

  2. String类型

  3. 枚举类型enum

  4. 注释类型

  5. 以上类型的数组

定义过属性后需要给属性赋值,也可以设置默认值default

正规格式:@自定义类型名(name=“aaa”)

只有value属性名可以省略不写,直接在括号内写属性值

3.元注解

注解类必备注解

**@Target:**用来约束注解可以使用的地方(方法,类,字段等)

@target(Element.Type.field ;menthod)

**@Retention:**用来约束注解的生命周期

@Retention(RetentionPolicy.source;class;rentime)

  1. 源码级别(source)

    source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略

  2. 类文件级别(class)

    class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期

  3. 运行时级别(runtime)

    runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在

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

**@Inherited:**描述注解是否被子类继承

解释注解
@Target(ElementType.TYPE)	//定义注解可以使用的位置
@Retention(RetentionPolicy.RUNTIME)	//定义注解都可以保留的位置
public @interface MyAnno{
    String className();
    String methodName();
}

定义一个被调用到的类

public class People{
	public void test(){
        System.out.println("执行了People类中的test方法");
    }
}

定义一个测试类

@MyAnno(className = "com.qy129.test.People",methodName = "test")	//className里面放的路径,methodName里面放的是该类的方法名
public class PeopleTest{
    public static void main(String[]args)throws Exception{
        //1.解析注解
        //获得获取该类的字节码对象
        Class<PeopleTest> pc=PeopleTest.class;
        //2.获取上边的注释对象
        MyAnno anno = pc.getAnnotation(MyAnno.class);
        //3.调用注解对象中的抽象方法
        String className = anno.className();//得到上边注释中方法类名
        String methodName = anno.methodName();//得到上边注释中的类中的方法名
        System.out.println(className+"====="+methodName)//输出上面得到的值为了证实
        //4.根据读取到的className加载该类进入内存
        Class<?>name = Class.ForName(className);
        //5.创建对象
        Object o = name.newInstance();
        //6.根据读取到的方法的名字获取方法对象
        Method method = name.getMethod(methodName);
        //7.执行方法
        method.invoke(o);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值