<!-- 首先,通过Class获取类的字节码 Class clazz = Class.forName("com.marer.reflect.Person"); 然后,利用Constructor创建对象 Constructor c = clazz.getConstructor(null);//获取无参的构造函数 Constructor c = clazz.getConstructor(String.class);//获取参数为String的构造函数 Constructor c = clazz.getConstructor(String.class, int.class);//获取参数为String,int的构造函数 Constructor c = clazz.getDeclaredConstructor(List.class);//获取隐藏为private的构造函数 c.setAccessible(true);//暴力反射 创建对象的另外一种途径,反射出类的无参构造函数并创建对象 Class clazz = Class.forName("com.marer.reflect.Person"); Person p = (Person) clazz.newInstance(); 但是当无参的构造函数为private或不存在的时候,反射抛异常 转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49822819 但是可以通过暴力反射获取类的隐藏构造函数: Constructor.setAccessible(true);
-->
//解剖类的构造函数,创建类的对象
public class Demo2 {
//反射构造函数:public Person()
@Test
public void test1() throws Exception{
Class clazz = Class.forName("com.marer.reflect.Person");
Constructor c = clazz.getConstructor(null);
Person person = (Person)c.newInstance(null);
System.out.println(person.str);
}
//反射构造函数:public Person(String name)
@Test
public void test2() throws Exception{
Class clazz = Class.forName("com.marer.reflect.Person");
Constructor c = clazz.getConstructor(String.class);
Person person = (Person)c.newInstance("测试成功");
System.out.println(person.str);
}
//反射构造函数:public Person(String name, int age)
@Test
public void test3() throws Exception{
Class clazz = Class.forName("com.marer.reflect.Person");
Constructor c = clazz.getConstructor(String.class, int.class);
Person person = (Person)c.newInstance("测试成功",123);
System.out.println(person.str);
}
//反射四有的构造函数:private Person(List list)
@Test
public void test4() throws Exception{
Class clazz = Class.forName("com.marer.reflect.Person");
Constructor c = clazz.getDeclaredConstructor(List.class);
c.setAccessible(true);//暴力反射
Person p = (Person) c.newInstance(new ArrayList());
System.out.println(p.str);
}
//创建对象的另外一种途径,反射出类的无参构造函数并创建对象
//但是当无参的构造函数为private或不存在的时候,反射抛异常
@Test
public void test5() throws Exception{
Class clazz = Class.forName("com.marer.reflect.Person");
Person p = (Person) clazz.newInstance();
System.out.println(p);
System.out.println(p.str);
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有