美文网首页
Java反射与注解(一)基础知识

Java反射与注解(一)基础知识

作者: Active_Loser | 来源:发表于2018-05-29 21:43 被阅读0次

    一、反射(Reflect)描述

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法和属性,这是由Class对象来完成的,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。我们使用反射,通常是为了获取以下属性。

    • Field 属性
    • Method方法
    • Constructor 方法

    1、获取属性和方法

    1.1、获取Class类

    //c引用保存内存地址指向堆中的对象,该对象代,会执行静态语句块
    Class class = Class.forNmae(String className);
    
    //每个类型都有Class属性,不会执行静态语句块
    Class class =ClassName.class;
    
    //返回运行时类,通过对象.cgetClass()获取
    User user=new User();
    Class class =user.getClass();
    

    1.2、获取属性

    //获取所有被Public修饰的属性
    Field [] fields =class .getFields();
    //获取所有属性
    Field [] fields =class .getDeclaredFiedls();
    
    //获取修饰符
    int i=fields .getModiFields();
    String strModfire=Modifire.toString(i);//将Int转化为String 
    //获取字段的声明类型
    Class type=fis.getType();
    String name=type.getName();
    //获取字段名
    String name=fs[i].getName();
    //获取特定的属性
    Field field=class .getDeclaredFiedls("name");
    
    //创建新实例
    Object object=class .cnewInatance();
    //若属性为私有,无法访问,可以使用打破私有,但因此打破了封装性
    field.setAccessiable(true);
    field.set(object,"赋值"); 
    //获取值
    field.get(object);
    

    1.3、获取方法

    //获取所有的方法
    Method [] ms=class .getDeclaredMethods();
    
    //获取方法修饰符
    int i=ms[i].getModifires();
    String modifireName=Modifire.toString(i)
    //获取返回值类型
    Class returnType=ms[i].getReturnType();
    String name=returnType.getSimpleName();
    //获取方法名
    String name=ms.getName();
    //获取方法形式参数列表类型
    Class[] parmeters=ms.getParmeterTypes();
    //获取某个特定的方法
    //需要方法名+参数列表,如下获取methodName方法,传入方法名,以及形参类型
    Method m=class .getDeclaredMethod("methodName",String.class,String.class);
    Object object =class .newInstance();
    Object retValue=m.invoke(object ,"实参","实参")
    

    1.4、 获取父类或父接口

    //获取父类
    Class superClass=class .getSuperclass();
    superClass.getName();
    //获取父接口
    Class[] ins=class .getInterfaces();
    ins[i].getName();
    

    二、注解(Annotation)描述

    注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK 1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
    注解是用于告诉编译器一些信息让编译器能够实现基本的编译检查。

    1、示例与基本属性

    我们打开Android studio,查看我们最常用的Override,我们会在Activiy的许多方法前见到它,他的源码如下,我们先不解释其各个属性,我们先学习Annotation的基本属性,相信最后我们就可以理解这段内容了。

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {
    }
    

    Override上的@Targe@Retention我们称之为元注解(meta-annotation),因此我们自定义前需要了解元注解,元注解主要有以下四类。

    • @Target:指Annotation所修饰的对象范围,这里列出常用的信息
    TYPE:类、接口(包括注解类型)或枚举
    FIELD:属性
    METHOD:方法
    CONSTRUCTOR:构造函数
    
    • @Retention:指Annotation生效的时间
    SOURCE:源文件中有效
    CLASS:编译时有效
    RUNTIME:在运行时有效
    
    • @Documented(了解即可):是一个标记注解,用于描述其它类型的注解应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
    • @Inherited(了解即可):也是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的

    相关文章

      网友评论

          本文标题:Java反射与注解(一)基础知识

          本文链接:https://www.haomeiwen.com/subject/tjiijftx.html