将类的各个组成部分封装成其他对象,这就是反射的机制.
通过上图,我们可以通过反射获得Person类的Class对象,通过获得Class对象来获得其中的成员变量,构造方法和成员方法,这个也是我们使用反射的目的。
那么知道了反射,框架又是什么呢
框架:半成品软件,我们在开发的过程中可以在框架的基础上使用一些封装好的类进行软件开发,这样就可以简化编码了.
Person类
public class Person {
}
Main类
public class Main {
public static void main(String[] args) throws Exception {
Class person = Class.forName("test.Person");
Class person1 = Person.class;
Person p = new Person();
Class person2 = p.getClass();
System.out.println(person);
System.out.println(person1);
System.out.println(person2);
}
}
程序运行结果
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个
因为所有的方法使用方式类似,在这里我就只演示获取成员变量的方法了
Person类
public class Person {
public String name;
private int age;
public String sex;
}
Main类
public class Main {
public static void main(String[] args) throws Exception {
Class person = Class.forName("test.Person");
Field[] fields = person.getFields();
System.out.println("getFields():只能获得公有的属性");
for(int i = 0;i<fields.length;i++){
System.out.println(fields[i]);
}
System.out.println("-----------------------------");
Field[] fields1 = person.getDeclaredFields();
System.out.println("getDeclaredFields():能获得所有的属性");
for(int i = 0;i<fields1.length;i++){
System.out.println(fields1[i]);
}
System.out.println("-----------------------------");
Field field = person.getField("name");
System.out.println("getField():获得单个公有属性");
System.out.println(field);
}
}
程序运行结果
getFields():只能获得公有的属性
public java.lang.String test.Person.name
public java.lang.String test.Person.sex
-----------------------------
getDeclaredFields():能获得所有的属性
public java.lang.String test.Person.name
private int test.Person.age
public java.lang.String test.Person.sex
-----------------------------
getField():获得单个公有属性
public java.lang.String test.Person.name
这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方...
从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很...
Greediness(贪婪型):最大匹配 X、X*、X+、X{n,} 是最大匹配。例如你要用 “....
1 . 目标 演示下图的git reset 各选项的效果。 2. Git Reset操作说明 图中说明:...
橡皮擦一个逗趣的互联网高级网虫。 观前提醒本篇文章涉及知识点巨大建议先收藏再...
3月22日消息 外媒 Winfuture 报道,此前微软面向 Insider 预览用户公布了 Window...
本文实例讲述了正则表达式中的操作符及说明。分享给大家供大家参考,具体如下: ...
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可...
2月23日消息 据外媒 Windows Latest 今日报道,借助 Windows 10 Sun Valley 更新...
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里...