注解和反射

注解和反射

1. 注解

注解(Annotation):

  • Annotation是JDK5.0引入的新技术

  • Annotation的作用可以对程序做出解释、可以被其他程序读取

  • Annotation的格式:@注解名,参数值

  • Annotation的使用范围:package,class,method,field

2. 内置注解

@override:定义在java.lang.Override中,只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明

@Deprecated:定义在java.lang.Deprecated中,用于修饰方法、属性、类,表示不建议使用这样的元素

@SuppressWarnins:定义在java.lang.SuppressWarning中,用于抑制编译时的警告信息,使用时需要添加参数

3. 元注解

元注解的作用:负责注解其他注解

元注解类型:

  • @Target:用于描述注解的使用范围

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

  • @Document:说明该注解被包含在javadoc中

  • @Inherited:说明子类可以继承父类的该注解

4. 自定义注解

使用@interface自定义注解时,自动继承java.lang.annotation.Annotation接口

  • @interface用来声明一个注解,格式:public@interface 注解名{定义内容}

  • 每个方法实际上声明了一个配置参数

  • 方法名称就是参数的名称

  • 返回值类型就是参数的类型(class,string,enum)

  • 可以通过default来声明参数的默认值

  • 只有一个参数成员,一般为value

  • 注解元素必须有值,定义注解元素时,经常使用空字符串,0作为默认值

5. 反射

反射机制:反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能操作任意对象的内部属性及方法

加载完类之后,在堆内存的方法区中就产生了一个class类型的对象(一个类只有一个class对象),这个对象就包含了完整的类的结构信息,通过这个对象可以看到类的结构

反射方式:实例化对象---->getClass()方法---->得到完整的包类名称

反射提供的功能:

  • 在运行时判断任意一个对象所属的类

  • 在运行时构造任意一个类的对象

  • 在运行时判断任意一个类所具有的成员变量和方法

  • 在运行时获取泛型信息

  • 在运行时调用任意一个对象的成员变量和方法

  • 在运行时处理注解

  • 生成动态代理

反射优点:可以实现动态创建对象和编译

反射缺点:对性能有影响

反射相关的API:

  • java.lang.Class:代表一个类

  • java.lang.reflect.Method:代表类的方法、

  • java.lang.reflect.Field:代表类的成员变量

  • java.lang.reflect.Constructor:代表类的构造器

6. class类

  • class本身也是一个类

  • class对象只能由系统建立

  • 一个加载的类在JVM中只有一个class实例

  • 一个class对象对应的是一个加载到JVM中的一个class文件

  • 每个类的实例都会记得自己是由那个class实例所生成

  • 通过class可以得到一个类中所有被加载的结构

获取class类的方法:

  • 已知具体的类:Class Clazz = Person.class;

  • 已知某个类的实例:class clazz = Person.getClass();

  • 已知某个类的全类名:Class clazz = Class.forName("demo.User")

setAccessible:启动和禁用访问安全检查的开关

  • Method、Field、Constructor对象都有该方法

  • 参数值为true表示在使用时取消java语言访问检查

  • 参数值为true表示在使用时启用java语言访问检查

7. 反射操作泛型

作用:确保数据的安全性和免去强制类型转换问题,java采用泛型擦除的机制来引入泛型

编译完成后,和泛型有关的类型会被全部擦除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值