当前位置:网站首页>反射+注解+泛型
反射+注解+泛型
2022-07-22 08:44:00 【Qwe7】
一、反射
1.1 反射是什么
Java的反射(reflection)机制是运行时获取类的信息(构造函数、属性、方法、注解)。
1.2 反射的作用
1.创建类的对象
2.获取类中的属性,并设置属性的值或者获取属性的值
3.获取类中的方法,可以执行方法(包含私有)
4.获取注解信息
1.3 反射的应用
1.创建类的对象,比如JSON解析,框架中的某些类等
2.获取或设置属性的内容 Field 比如 JSON解析,JDBC封装等
3.执行方法,可以调用Method invoke 代理模式
1.4 反射的演示
全限定类名:类的全称,包含:包名.类名
public static void main(String[] args) {
//反射 Class 字节码 创建Class对象
//Class对象的三种创建方式 1.类名.class 2.对象名.getClass() 3.Class.forName("全限定类名")
//1.创建Class对象
Class clz=Teacher.class;
//2.获取类中的公共属性
Field[] fields1=clz.getFields();//获取类中公共访问修饰符的属性,包含继承
for(Field f:fields1){
System.out.println(f.getName());
}
System.out.println("---------");
//3.获取类中的所有属性,不包含继承的
Field[] fields2=clz.getDeclaredFields();//获取类中的所有属性,不包含父类中的
for(Field f:fields2){
System.out.println(f.getName());
}
System.out.println("---------");
//4.获取公共方法
Method[] methods1=clz.getMethods();//获取类中公共访问修饰符的方法,包含继承
for(Method m:methods1){
System.out.println(m.getName());
}
System.out.println("**********");
//5.获取所有方法,不包含父类的
Method[] methods2=clz.getDeclaredMethods();//获取类中的所有方法,不包含父类中的
for(Method m:methods2){
System.out.println(m.getName());
}
}
1.5 反射总结
1.Class对象创建方式
●类名.class
●对象名.getClass()
●Class.forName("全称类名")
2.Class中常用的方法
返回值 | 方法名 | 作用 |
---|---|---|
Field[] | getFields | 获取类中公共访问修饰符的属性,包含继承 |
Field[] | getDeclaredFields | 获取类中的所有属性,不包含父类中的 |
Field | getDeclaredField(属性名) | 获取类中的指定的属性 |
Method[] | getMethods | 获取类中公共访问修饰符的方法,包含继承 |
Method[] | getDeclaredMethods | 获取类中的所有方法,不包含父类中的 |
Method | getDeclaredField | 获取类中的指定的方法 |
Object | newInstance | 创建类的对象 |
3.Field的常用方法
getName 获取属性名
setAccessible 设置是否忽略访问修饰符
set() 设置属性的值
4.Method的常用方法
setAccessible 设置是否忽略访问修饰符
invoke 执行方法
1.6 反射实际应用
解析字符串
Java
复制代码
1
public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException {
2
String str="name=贝贝&sex=女&info=自恋!";
3
//请实现字符串转换为Teacher对象
4
//1.解析字符串
5
//2.对象创建 属性赋值
6
//创建Class对象 -反射
7
Class clz=Teacher.class;
8
//创建类的对象
9
Teacher teacher= (Teacher) clz.newInstance();
10
//字符串常用方法 解析字符串 切割& 字符串数组
11
String[] strs1=str.split("&");
12
13
System.out.println(Arrays.toString(strs1));
14
//循环遍历 键值对
15
for(String s1:strs1){
16
//切割=
17
String[] strs2=s1.split("=");
18
System.out.println(Arrays.toString(strs2));
19
//反射 获取指定的属性对象
20
Field field=clz.getDeclaredField(strs2[0]);
21
if(field!=null){
22
//设置忽略访问修饰符
23
field.setAccessible(true);
24
//赋值
25
field.set(teacher,strs2[1]);
26
}
27
}
28
System.out.println(teacher);
29
}
边栏推荐
猜你喜欢
随机推荐
QT notes - unpolish() and polish() of QT dynamic attributes
C语言中continue的理解(fishing_1)
基于混合深度学习的多类型低速率DDoS攻击检测方法
Gbase8s database set database object mode statement
43. String multiplication
「武汉理工大学 软件工程复习」第一章 | 软件工程概述
Gbase8s database specifies the comparison order with set collation
Design of miner type identification mechanism based on reputation management model
如何破解IT中年危机下的惨淡人生
Verilog basic syntax (2)
测试员职场最大的危机不是30岁,而是中年被裁
shell脚本使用expect自动化交互登录远程主机进行批量关机
学IT,你后悔了么?
Verilog for loop (1)
Yunyuanyuan (10) | introduction to kubernetes in kubernetes
GBase8s数据库UNION 运算符
基于攻防博弈的网络防御决策方法研究综述
逆袭黑马:数据库全栈工程师(DevDBOps)培训,把最好的课程送给您!
Gbase8s database comparison performed by database objects
GBase8s数据库SET Database Object Mode 语句