您的位置:首页 > 编程语言 > Java开发

Java反射reflect学习笔记_2:反射类的构造函数

2015-11-13 20:35 459 查看
//===================================================

// 反射类的构造函数

//===================================================

<!--

| 首先,通过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或不存在的时候,反射抛异常

|转载请注明出处:/article/11906587.html

| 但是可以通过暴力反射获取类的隐藏构造函数

| 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: