java中反射类的加载和构造函数

来源:互联网 发布:mac版qq群文件 编辑:程序博客网 时间:2024/05/01 12:04

我们先创建了一个Person类

package reflect;public class Person {public String name = "zhangsan"; public Person(){System.out.println("person");}public Person(String name){System.out.println(name);}public Person(String name,int password){System.out.println("person name and password");}private Person(int i){System.out.println("person list");}}

加载类的方法

package reflect;public class Demo {public static void main(String[] args) throws ClassNotFoundException {/* * 反射:加载类,获取类的字节码 *///方法一Class clazz = Class.forName("reflect.Person");//方法二Class clazz2 = new Person().getClass();//方法三Class clazz3 = Person.class;}}



反射类的构造函数,可访问Person类,@Test是用junit来测试是否实现的

package reflect;import java.awt.List;import java.lang.reflect.Constructor;import java.util.ArrayList;import org.junit.Test;public class Demo2 {@Testpublic void test() throws ClassNotFoundException, ReflectiveOperationException, SecurityException{Class clazz = Class.forName("reflect.Person");Constructor c = clazz.getConstructor(null);Person p = (Person) c.newInstance(null);System.out.println(p.name);}@Testpublic void test2() throws Exception{Class clazz = Class.forName("reflect.Person");Constructor c = clazz.getConstructor(String.class);Person p = (Person) c.newInstance("success");System.out.println(p.name);}//访问私有@Testpublic void test3() throws Exception{Class clazz = Class.forName("reflect.Person");Constructor c = clazz.getDeclaredConstructor(int.class);c.setAccessible(true);Person p = (Person) c.newInstance(13);System.out.println(p.name);}//创建对象的另外一种方式@Testpublic void test4() throws Exception{Class clazz = Class.forName("reflect.Person");Person p = (Person) clazz.newInstance();System.out.println(p);}}



0 0
原创粉丝点击