反射

测试代码:
Test test=new Test();
Class c1=test.getClass();
//获取所有构造方法
//Constructor[] declaredConstructors = c1.getDeclaredConstructors();
//获取所有public构造方法
Constructor[] declaredConstructors = c1.getConstructors();
for (int i = 0; i < declaredConstructors.length; i++) {
System.out.print(Modifier.toString(declaredConstructors[i].getModifiers())+"参数: ");
//获取构造方法的所有参数类型
Class[] parameterTypes = declaredConstructors[i].getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
System.out.print(parameterTypes[j].getName()+" ");
}
System.out.println();
}
System.out.println("==========================");
try {
// Constructor declaredConstructor = c1.getDeclaredConstructor(int.class,String.class);
// Object zhangsan = declaredConstructor.newInstance(24, "张三");
Constructor declaredConstructor = c1.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
Object zhangsan = declaredConstructor.newInstance("张三");
Method method = c1.getDeclaredMethod("wel", String.class);
method.setAccessible(true);
method.invoke(zhangsan,"哈喽,朋友");
Field field = c1.getDeclaredField("name");
field.setAccessible(true);
field.set(zhangsan,"jjt");
System.out.println(field.get(zhangsan).toString());
System.out.print(Modifier.toString(declaredConstructor.getModifiers())+":");
Class[] parameterTypes = declaredConstructor.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++) {
System.out.print(parameterTypes[i].getName()+" ");
}
System.out.println();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
class Test{
private int age;
private String name;
private int testint;

public Test(int age) {
this.age = age;
}

public Test(int age, String name) {
this.age = age;
this.name = name;
System.out.println(name+"的年龄:"+age);
}

private Test(String name) {
this.name = name;
System.out.println("name = " + name);
}

public Test() {
}

private void wel(String a){
System.out.println("a = " + a);
}
}


posted @   jjtqwer  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示