//因为是私有的必须暴力反射
c.setAccessible(true);
Person p = (Person) c.newInstance(new ArrayList());
System.out.println(p.name);
}
//另外一种创建对象的途径
//实现原理:反射出类无参的构造函数 创建对象,
//想要创建对象类中必须有一个无参的构造
public static void test5() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
Person p = (Person) clazz.newInstance();
System.out.println(p);
}
}
import java.lang.reflect.Constructor;
import java.util.*;
public class Demo
{
/**反射类的构造函数,创建类的对象
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
//test1();
//test2();
//test3();
//test4();
test5();
}
// 反射构造函数 public Person()
public static void test1() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
//加载类后可以反射出类中的构造方法
Constructor c = clazz.getConstructor(null);
Person p = (Person)c.newInstance(null);
System.out.println(p.name);
}
// 反射构造函数 public Person(String name)
public static void test2() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
//加载类后可以反射出类中的构造方法
Constructor c = clazz.getConstructor(String.class);
Person p = (Person)c.newInstance("xxxxxx");
System.out.println(p.name);
}
// 反射构造函数 Person(String name, int password)
public static void test3() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
Constructor c = clazz.getConstructor(String.class,int.class);
Person p = (Person)c.newInstance("两个参数", 2);
System.out.println(p.name);
}
// 反射构造函数 Person(List list)
public static void test4() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
//因为这里是私有的所以必须用getDeclaredxxx xxx代表可能是方法 构造方法 成员变量等
Constructor c = clazz.getDeclaredConstructor(List.class);
//因为是私有的必须暴力反射
c.setAccessible(true);
Person p = (Person) c.newInstance(new ArrayList());
System.out.println(p.name);
}
//另外一种创建对象的途径
//实现原理:反射出类无参的构造函数 创建对象,
//想要创建对象类中必须有一个无参的构造
public static void test5() throws Exception
{
//加载类
Class clazz = Class.forName("cn.com.day1.Person");
Person p = (Person) clazz.newInstance();
System.out.println(p);
}
}
***************************************************邪恶的分割线**********************************************************************************************************************
//反射类的方法 以及 main方法
[java]
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Method;
import org.junit.Test;
public class Demo2
{
// 反射类的方法public void aal() 第一个
// invoke是调用方法.使用Junit
@Test
public void test1() throws Exception
{
Person p = new Person();
Class clazz = Class.forName("cn.com.day1.Person");
Method method = clazz.getMethod("aa1", null);
method.invoke(p, null);
}
// 反射类的方法public void aal(String name,int password) 第二个
@Test
public void test2() throws Exception
{
Person p = new Person();
Class clazz = Class.forName("cn.com.day1.Person");
Method method = clazz.getMethod("aa1", String.class, int.class);
method.invoke(