反射和注解

1. Properties

了解:
   Properties类表示一组持久的属性。 
   Properties可以保存到流中或从流中加载。 
   属性列表中的每个键及其对应的值都是一个字符串。
   Properties常用做配置文件使用
定义使用步骤:
   1.src下新建文件 xx.properties。
   2.创建Properties类型的对象。
   3.调用load(InputStream|Reader)。
   4.根据key获取value  getProperty(key)。

2. 反射
是JAVA有着一个非常突出的动态相关机制:Reflection。

反射是发生在程序运行期间的行为。
Java反射机制,可以实现以下功能:
    ①在运行时判断任意一个对象所属的类;
    ②在运行时构造任意一个类的对象;
    ③在运行时判断任意一个类所具有的成员变量和方法;
    ④在运行时调用任意一个对象的方法;
反射的源头 :
    Class : 类类实例表示正在运行的Java应用程序中的类和接口。
    Class类型的对象: 在一个类型加载到内存中就存在一个属于表示当前类型的Class对象,唯一的,不变的。
  • 反射的源头 :

     Class对象
       1.类名.class。
       2.Class.forName(权限定名) 权限定名: 包名.类名 。
       3.对象.getClass()。
    
  • 通过反射创建对象:

     1.Class ->newInstance()        默认调用空构造为对象初始化信息。
     2.Constructor->newInstance()   创建对象。
         1.获取某一个类中构造器:
             构造器<T> getConstructor(类<?>... parameterTypes)
                        返回一个 构造器对象,该对象反映此 类对象所表示的类的指定公共构造函数。
             构造器<?>[] getConstructors() 
                        返回一个包含 构造器对象的数组, 构造器对象反映了此 类对象所表示的类的所有公共构造函数。
             构造器<T> getDeclaredConstructor(类<?>... parameterTypes) 
                        返回一个 构造器对象,该对象反映此 类对象所表示的类或接口的指定构造函数。
             构造器<?>[] getDeclaredConstructors() 
                        返回 构造器对象的数组, 构造器对象反映由此 类对象表示的类声明的所有构造函数。
         2.调用Constructor类提供的newInstance方法,创建对象的时候调用当前构造器初始化信息。
    
  • 通过反射操作成员:

    操作方法:
         1.获取方法
             方法 getMethod(String name, 类<?>... parameterTypes)          
                         返回 方法对象,该对象反映此 类对象表示的类或接口的指定公共成员方法。
             方法[] getMethods() 
                         返回一个包含 方法对象的数组, 方法对象反映此 类对象所表示的类或接口的所有公共方法,包括由类或接口声明的那些以及从超类和超接口继承的那些。
             方法 getDeclaredMethod(String name, 类<?>... parameterTypes) 
                         返回 方法对象,该对象反映此 类对象表示的类或接口的指定声明方法。
             方法[] getDeclaredMethods() 
                         返回一个包含 方法对象的数组, 方法对象反映此 类对象表示的类或接口的所有已声明方法,包括public,protected,default(package)访问和私有方法,但不包括继承的方法。
         2.调用方法
             Object invoke(Object obj, Object... args) 
                         在具有指定参数的指定对象上调用此 方法对象表示的基础方法。
    操作属性:
         1.获取属性
             字段 getField(String name) 
                         返回 字段对象,该对象反映此 类对象表示的类或接口的指定公共成员字段。
             字段[] getFields() 
                         返回一个包含 字段对象的数组, 字段对象反映此 类对象所表示的类或接口的所有可访问公共字段。
             字段 getDeclaredField(String name) 
                         返回 字段对象,该对象反映此 类对象表示的类或接口的指定声明字段。
             字段[] getDeclaredFields() 
                         返回 字段对象的数组, 字段对象反映由此 类对象表示的类或接口声明的所有字段。
         2.获取属性值
             Object get(Object obj) 
                         返回指定对象上此 字段表示的字段的值。
         3.设置属性值
             void set(Object obj, Object value) 
                         将指定对象参数上此 字段对象表示的字段设置为指定的新值。
    

3. 注解
标注,jdk1.5新特性。

  • 作用:

     1.注释,解释的作用。
     2.标志检查的作用。
     3.添加注解的时候可以通过配置传递参数,运行期间通过反射获取到配置的数据,程序中进行使用。
     4.注解可以存在与Class文件中。
     5.注解大量的代替了配置文件的存在。
    
  • 语法:

     @注解名(实参)
    
  • 位置:

     任意位置
    
  • 分类:

     jdk内置注解:
          @Override                限定重写父类方法
          @Deprecated              标记已过时
          @SuppressWarnings        抑制警告
          @FunctionalInterface     函数式接口
     元注解 : 注解注解的注解。
     自定义注解。
    
  • 参数个数划分:

     标记注解 : 没有参数。
     单值注解 : 一个参数。
     完整注解 : 多个参数。
    
  • 原注解 :
    注解注解的注解

      @Target         用于描述注解的使用范围(即:被描述的注解可以用在什么地方)。
      @Retention      表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有)。
      @Documented     表示使用该注解的元素应被javadoc或类似工具文档化。
      @Inherited      表示一个注解类型会被自动继承。
    
  • 自定义注解 :

     1.通过@interface自定义注解类型。
     2.自定义的注解类型默认实现java.lang.annotation Annotation接口。
     3.自定义的注解类型不能显示的继承其他父类,实现其他接口。
     4.注解类中可以定义注解类型的字段,特殊的定义方法,需要字段名后面添加()  --> 修饰符 类型 字段名();
     5.如果注解类型中只有一个字段,建议这个字段名定义为value,赋值的时候可以直接赋值。
     6.注解类型中的字段的数据类型,只能为以下几种类型 : 基本数据类型,String,Annotation,枚举类型,或者这几种类型的数组。
     7.字段的修饰符只能为public|default。
     8.通过default关键字为字段定义默认值。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值