反射入门(小白教程,超级详细)
Posted 小布丁value
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射入门(小白教程,超级详细)相关的知识,希望对你有一定的参考价值。
定义
获取当前类的Class对像:
1.Class<?> c= People.class;
2.People p = new People();
Class<?> c = p.getClass();
3.Class<?> c = Class.forName(“包路径.People”)
问题来了:不用单例模式怎么在
1.在堆上new 对象
2.调用构造函数呢?
当然就是我们的反射了:
构造函数
public class TEST {
public static void main(String[] args) {
Class<?> c=People.class;
try {
//获取构造函数
Constructor<?> constructor = c.getDeclaredConstructor(String.class);
//权限开放
constructor.setAccessible(true);
//通过new 调用构造函数
Object object= constructor.newInstance("zs");
} catch (Exception e) {//基类处理异常。不关心的时候
e.printStackTrace();
}
}
}
class People{
private String name;
private People(String name){
this.name=name;
}
}
说明:
getDeclaerdConsttuctor 获取共有的私有的 所有的构造函数
getConstructor获取共有的构造函数
如果不该默认权限,就会报IlegnalAccessException异常
//权限开放
constructor.setAccessible(true);
问题解决
方法调用
//eat方法调用
//1.获取调用的方法
c.getMethod("eat",int.class);
//1.获取调用的方法
Method method = c.getMethod("eat", int.class);
//2.通过对象体调用方法
method.invoke(object,10);
修改属性
public class TEST {
public static void main(String[] args) throws NoSuchMethodException {
Class<?> c=People.class;
try {
//获取构造函数
Constructor<?> constructor = c.getDeclaredConstructor(String.class);
//权限开放
constructor.setAccessible(true);
//通过new 调用构造函数
Object object= constructor.newInstance("zs");
//eat方法调用
//1.获取调用的方法
Method method= c.getMethod("eat",int.class);
//2.通过对象体调用方法
method.invoke(object,10);
//name ="lisr";进行属性打印。p.name="lisr";println(p.name);
// 方法1:通过new 调用构造函数
Object object1 = constructor.newInstance("lisr");
System.out.println(object1);
//方法2:
//获取属性
Field field = c.getDeclaredField("name");
//修改权限
field.setAccessible(true);
//设置属性
field.set(object,"lisr");
System.out.println(field.get(object));
} catch (Exception e) {//基类处理异常。不关心的时候
e.printStackTrace();
}
}
}
class People{
private String name;
private People(String name){
this.name=name;
}
public void eat(int a){
System.out.println("吃饭");
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\\'' +
'}';
}
}
以上是关于反射入门(小白教程,超级详细)的主要内容,如果未能解决你的问题,请参考以下文章
资深黑客教小白如何攻破一个网站!超级详细的教学教程!太牛逼了
python爬虫入门教程(非常详细),超级简单的Python爬虫教程