黑马程序员------新特性反射 (四)

2014-11-24 10:41:15 · 作者: · 浏览: 6
redConstructor(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);


}



}

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(