一、注解

注解(annotation): 从jdk5.0开始引进,可以对程序进行解释或被其他程序读取。

注解格式:”@注释名”,并可以添加一些参数。

例:@myannotation(value=‘value’)

1、内置注解

@override: 用于修饰方法,表示该方法声明是重写或实现一个父类的方法

@deprecated: 用于修饰方法、属性、类,表示已过时不建议使用的

@suppresswarnings: 用于抑制编译时的警告信息

2、元注解

作用:用于注解其他注解

@target: 用于描述注解的适用范围

例:@target(elementtype.annotation_type) 适用范围为注解定义

@retention: 表示需要在什么级别保存该注解信息

source – 源码级别

class – class级别

runtime – 运行级别

source < class < runtime

例:@retention(retentionpolicy.runtime) 此注解运行时有效

@documented: 表示是否将注解生成在javadoc中

@inherited: 表示子类可以继承父类的注解

3、自定义注解

注解定义:@interface+注解名

测试:

二、反射

反射(reflection)是java被视为动态语言的关键,反射机制允许程序在执行期借助于reflection api取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

优缺点:具有灵活性但是效率较低。

class c = class.forname(java.lang.string)

1、class类

某个类的属性、方法和构造器、某个类实现了哪些接口,jre都为其保留了一个不变的class类型的对象,同一个类的所有对象共享同一个class对象。

class类具有以下特点:

  • class本身也是一个类
  • class对象只能由系统建立对象
  • 一个加载的类在jvm中只会有一个class实例
  • 一个class对象对应的是一个加载到jvm中的一个class文件
  • 每个类的实例都会记得自己是由哪个class实例所生成
  • 通过class可以完整地得到一个类中的所有被加载结构
  • class类是reflection的根源,针对任何想动态加载、运行的类,唯有先获得相应的class对象

class类的常用方法:

方法名 功能说明
static class.forname(string name) 返回指定类名name的class对象
object newinstance() 调用缺省构造函数,返回class对象的一个实例
getname() 返回此class对象所表示的实体(类、接口、数组类或void)的名称
class getsuperclass() 返回当前class对象的父类class对象
class[] getinterfaces() 返回当前class对象的接口
class loader getclassloader() 返回该类的类加载器
constructor[] getconstructors() 返回一个包含某些constructor对象的数组
method getmethod(string name ,class t) 返回一个method对象,此对象的形参类型为paramtype
field[] getdeclaredfields 返回field对象的一个数组

2、通过反射获取class对象:

所有的类都可以通过反射获取其class对象。

下面通过例子列举获取类的class对象的三种方式:

输出结果:

结论:三种方式获取的class对象为同一个。

3、获取类的运行时结构

4、通过反射构造对象

5、通过反射获取注解的信息

创建类和注解

测试

总结

到此这篇关于java中的注解和反射的文章就介绍到这了,更多相关java注解和反射内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!