反射和注解

注解和反射

注解

内置注解

  • @Override(覆盖,重写)

定义在java.lang.Override中,用于修饰方法,只能用于重写父类的方法的时候使用

  • @Deprecated(不赞成,强烈反对)

定义在java.lang.Deprecate中,此注解可用于修饰方法,属性和类,表示不鼓励程序员使用这样的元素(但可以使用)通常是因为它很危险或者存在更好的选择。

并且表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。

  • SuppressWarnings(镇压警告)

定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。

与前两个注释有所不同的是,这个注解需要添加一个系统定义好的参数才能正确使用。

相关参数如下:

参数说明
deprecation 使用了过时的类或者方法的警告
unchecked 执行了未检查的转换时的警告,如使用集合时未指定泛型
fallthrough 当在switch语句使用时发生case穿透
path 在类路径、源文件路径等中有不存在路径的警告
serial 当在可序化的类上缺少serialVersionUID定义时的警告
finally 任何finally字句不能完成时的警告
all 关于以上所有情况的警告

— 压制一种的写法为:

@SuppressWarnings("unchecked")

— 压制两种或两种以上的写法为:

@SuppressWarnings(value={"unchecked","deprecation"})

元注解

  • 元注解的作用是负责注解其他注解。java定义了4个标准的meta-annotation类型,它们被用来提供对其他annotation类型做出说明。

  • 四个类型分别为

    • @Target

      • 用于描述注解的使用范围()

         

         

        @Target(Value=ElementType.TYPE)
    • @Retention(保留,维持)

      表示需要在什么级别保存该注释信息,用于解释注释的生命周期

       

       

      作用等级:SOURCE<CLASS<RUNTIME

      @Retention(RetentionPolicy.RUNTIME)
    • @Documented

    • @Inherited

自定义注解

@Interface

 

反射机制

动态语言

表示程序运行时,可以改变程序结构或变量类型,java不是动态语言,但是有一定的动态性,可以利用反射机制、字节码操作活得类似动态语言的特性。

反射机制

指的是可以与运行时加载,探知,使用编译期间完全未知的类。

Class类介绍

  • java.lang.Class类十分特殊,用来表示java中类型(class、interface、enum、annotation、primitive type、void)本身

    — Class类的对象包含了某个被加载类的结构,一个被加载的类对应一个Class对象。

    — 当一个Class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM便会自动产生一个Class对象。

  • Class类是Reflection的根源。

— 针对任何想动态加载、运行的类,只有先获得相应的Class对象。

Class类的对象获取方法

  1. 运用getClass()

  2. 运用Class.forName() (最常被使用)

  3. 运用.class语法

Class clazz=Class.forName(包名+类名);

Class类常用的方法

clazz是上面的类名。

  • 获取类的名字

    • clazz.getName() —获得包名+类名

    • clazz.getSimpleName() —获得类名

  • 获取属性信息

    • clazz.getFields() —获得public的field

    • clazz.getDeclaredFieds() —获得所有的field

  • 获取方法信息

    • clazz.getMethods() —获得public的方法

    • clazz.getDeclaredMethods() —获得所有的方法

    • Method method=clazz.getDeclaredMethod(“方法名",方法的返回值类型(没有的话为空)); —获取单个方法

  • 获取构造器信息

    • Constructor[] constructors=c.getDeclaredConstructors();\\获得所有构造器
    • Constructor[] constructors=c.getConstructors();\\获得私有构造器

反射机制的常见作用

  • 动态加载类、动态获取类的信息(属性,方法,构造器)

  • 动态构造对象

  • 动态调用类和对象的任意方法、构造器

  • 动态调用和处理属性

  • 获取泛型信息

  • 处理注解

 

 

 

posted @ 2021-08-24 21:48  AMHAO  阅读(52)  评论(0编辑  收藏  举报