Java关于 反射 的一些整理
来源:互联网 发布:eve online for mac 编辑:程序博客网 时间:2024/06/05 23:00
关于反射
反射的功能:
可以在运行期间获取任意对象的类型的信息
创建在编译期间完全位置的类的对象
编写一些通用的工具类
原来是通过类名创建对象,现在可以通过对象获取到类的信息
反射的根源:Class对象
所有的类具有共同的特征,那么就可以吧这些抽象成一个Java类描述它,用这个类,来描述所有类的特征,这个类就是Class类
每一个类都是Class类的对象
任意类型的对象,又都是Object的对象
比如String类型就是一个Class的对象
有四种方式可以拿到Class对象
1、类名.class 编写工具类时使用比较多
2、对象.getClass()
3、Class.forName("包名.类名")
4、ClassLoader.getSystemClassLoader().loadClass("包名.类名")
得到了类加载器
5、通过自定义类加载器,类加载器对象.loadClass("包名.类名")
类型可以在编译期间未知,但是在运行期间必须存在可以找到
反射的步骤:
1、获取Class对象
2、通过Class对象,可以:
创建Class对象对应的类型的实例
获取所有的信息(包、类名、属性。。。)
访问定义的实例的属性
设置实例的属性值
调用任意一个方法
eg:
获取包名,是个Package类型,意思就是所有的包也都具有相同的特征,于是就可以抽象成一个类
修饰符的获取,会返回数字,会吧多个修饰符一起返回
Modifier.toString(数字) 就能得到修饰符了
Java中所有类的属性,也都具有相同的一些特征,就可以抽象成一个类Filed,每个属性都是Field的对象
getFiled:获取公共属性
getDeclaredField:获取所有声明的属性
clazz.newInstance() 可以创建一个对象,仅仅用于无参的公共的构造器
否则,要先取到构造器getDeclaredConstructor(形参列表)
然后就可以 构造器.newInstance(实参列表)
私有的属性如果访问的时候,要避免安全检查
setAccessible(true)
get(obj) 获取某个对象的属性
set(obj,value) 把某个对象的属性设置成value
Java的方法也都具有一些共同的特征,于是就可以抽象成Method类,每一个方法也都是Method对象
getMethod(名称,形参列表的类型) 从所有公共的方法中找
getDeclaredMethod() 在声明的方法中找
在类中找一个方法:就是方法名称+形参列表
method.invoke(obj ,args) 要传实参列表了
泛型父类
Type type = clazz.getGenericSuperClass() Type类型
ParameterizedType p =(..)type;
Type[] array = p.getActualTypeArguments();
获取到带的泛型信息
获取注解信息(注解配置参数的值)
MyField ann = 有配置参数的属性.getAnnotation(MyField.class)
然后获取值 ann.columnName()
类似于直接调用方法一样
注解在声明时,要注意生命周期的设置@Retetion(RetetionPolicy.RUNTIME)
反射的功能:
可以在运行期间获取任意对象的类型的信息
创建在编译期间完全位置的类的对象
编写一些通用的工具类
原来是通过类名创建对象,现在可以通过对象获取到类的信息
反射的根源:Class对象
所有的类具有共同的特征,那么就可以吧这些抽象成一个Java类描述它,用这个类,来描述所有类的特征,这个类就是Class类
每一个类都是Class类的对象
任意类型的对象,又都是Object的对象
比如String类型就是一个Class的对象
有四种方式可以拿到Class对象
1、类名.class 编写工具类时使用比较多
2、对象.getClass()
3、Class.forName("包名.类名")
4、ClassLoader.getSystemClassLoader().loadClass("包名.类名")
得到了类加载器
5、通过自定义类加载器,类加载器对象.loadClass("包名.类名")
类型可以在编译期间未知,但是在运行期间必须存在可以找到
反射的步骤:
1、获取Class对象
2、通过Class对象,可以:
创建Class对象对应的类型的实例
获取所有的信息(包、类名、属性。。。)
访问定义的实例的属性
设置实例的属性值
调用任意一个方法
eg:
获取包名,是个Package类型,意思就是所有的包也都具有相同的特征,于是就可以抽象成一个类
修饰符的获取,会返回数字,会吧多个修饰符一起返回
Modifier.toString(数字) 就能得到修饰符了
Java中所有类的属性,也都具有相同的一些特征,就可以抽象成一个类Filed,每个属性都是Field的对象
getFiled:获取公共属性
getDeclaredField:获取所有声明的属性
clazz.newInstance() 可以创建一个对象,仅仅用于无参的公共的构造器
否则,要先取到构造器getDeclaredConstructor(形参列表)
然后就可以 构造器.newInstance(实参列表)
私有的属性如果访问的时候,要避免安全检查
setAccessible(true)
get(obj) 获取某个对象的属性
set(obj,value) 把某个对象的属性设置成value
Java的方法也都具有一些共同的特征,于是就可以抽象成Method类,每一个方法也都是Method对象
getMethod(名称,形参列表的类型) 从所有公共的方法中找
getDeclaredMethod() 在声明的方法中找
在类中找一个方法:就是方法名称+形参列表
method.invoke(obj ,args) 要传实参列表了
泛型父类
Type type = clazz.getGenericSuperClass() Type类型
ParameterizedType p =(..)type;
Type[] array = p.getActualTypeArguments();
获取到带的泛型信息
获取注解信息(注解配置参数的值)
MyField ann = 有配置参数的属性.getAnnotation(MyField.class)
然后获取值 ann.columnName()
类似于直接调用方法一样
注解在声明时,要注意生命周期的设置@Retetion(RetetionPolicy.RUNTIME)
阅读全文
0 0
- Java关于 反射 的一些整理
- 关于java反射的一些理解
- 关于Java反射的一些事
- Java特性关于反射的一些技术
- 关于java反射的一些小栗子
- java的反射技术功能十分强大,整理一些资料!!
- java的反射技术功能十分强大,整理一些资料!!
- java的反射技术功能十分强大,整理一些资料!!
- java的反射技术功能十分强大,整理一些资料!!
- 关于java基础的一些整理!
- 关于java乱码的一些整理
- 关于java锁的一些知识整理
- Java基础知识 十七 (关于反射一些方法的总结)
- 关于java反射机制的一些基本操作
- 关于反射的一些知识
- 关于反射的一些程序
- 关于反射的一些内容
- 关于反射的一些姿势
- XZ_JavaScript之JavaScript中常见的事件(DOM事件)
- 爬虫自学1
- maven多项目管理
- 分享一下我的网络封装工具类
- webpack--概念9--模块热替换
- Java关于 反射 的一些整理
- curl不能支持https问题
- 4.4、 Shell编程中数组、date和cal命令
- strace命令基本用法
- 快速排序 Java
- 区块链原理学习之二-私钥公钥和地址
- MySQL 数据备份与还原
- thinkphp5.0 volist
- 关于CAShapeLayer的一些实用案例和技巧