反射讲解,有错误的请见谅。

反射是基础中最重要的一部分内容了,我们的类在运行的时候会进行三个步骤。

1.类的加载:把类的.class文件加载到java.lang.class文件中去。

2.类的连接:给类分配地址,分配内存。

3.类的初始化:就是使用构造方法创建类对象。public 类名() {}

比如一个学生类,以前我们创建使用:Student s = new Student();

s.name = "张三";

s.method;

但学了反射后我们可以这样创建:

1.获取类的管理对象类Class,Class类对象是所有类的运行环境。Class.forName("类路径");

Class<?> c = Class.forName("System.Student");

2.通过这个Class类管理对象我们可以通过它的方法获取类的构造方法,成员变量和成员方法。

A,获取类的构造方法:

Constructor<?>[] cons = c.getDeclaredConstructors();//获取全部构造方法
Constructor<?> con = c.getDeclaredConstructor(String.class, int.class);
//根据指定的参数获取指定的构造方法。

B,获取成员变量:

Field[] fields = c.getDeclaredFields(); //获取所以的成员变量
Field name = c.getField("name"); //根据姓名获取成名变量

C,获取成员方法:

Method[] methods = c.getDeclaredMethods(); //获取所有方法
Method method2 = c.getDeclaredMethod("method2", String.class); //根据方法名获取

好了,那么这些都会了之后,我们如何使用呢???

成员变量的使用如何:

Field name = c.getField("address");
Field name = c.getDeclaredField("address");

如何解决?把上面那句换成下面哪句就行,可是,为什么还是报错???

因为,我们的成员变量是private修饰符修饰的,所以说JVM运行会报错,但是我们的成员变量对象有个方法可以解决这个问题;

Field name = c.getDeclaredField("address");
name.setAccessible(true); //这句话就能暴力反射,强制设置成员变量
name.set(o,"北京");

成员方法的使用如下:

 

现在我们来加强练习,使用配置文件来运行Student类

1.创建class.txt文件用 键值对把 类的路径和方法名写入class.txt文件中去

2.创建Properties的对象,读取!class.txt文件;

3.使用反射赋值成员变量为张三,18岁,北京

4.使用method2方法

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值