反射类的构造函数

来源:互联网 发布:网上图书馆数据库 编辑:程序博客网 时间:2024/06/10 07:27

Person.java

package com.feng.reflect;import java.util.List;public class Person {public String name="aaa";public Person(){System.out.println("person");}public Person(String name){System.out.println(name);}public Person(String name,int password){System.out.println(name+":" +password);}private Person(List list){System.out.println("list");}}

Demo.java

package com.feng.reflect;import java.awt.List;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import org.junit.Test;//反射类的构造函数,创建类的对象public class Demo2 {//反射类的构造函数:public person()@Testpublic void test1() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{Class clazz = Class.forName("com.feng.reflect.Person");Constructor c = clazz.getConstructor(null);Person person = (Person)c.newInstance(null);System.out.println(person.name);}//反射类构造函数:public person(String name)@Testpublic void test2()throws Exception{Class clazz = Class.forName("com.feng.reflect.Person");Constructor c = clazz.getConstructor(String.class);Person p = (Person) c.newInstance("xxx");System.out.println(p.name);}//反射类构造函数:public person(String name,int password)@Testpublic void test3()throws Exception{Class clazz = Class.forName("com.feng.reflect.Person");Constructor c = clazz.getConstructor(String.class,int.class);Person p = (Person)c.newInstance("xxx",12);System.out.println(p.name);}//private Person(List list)@Testpublic void test4()throws Exception{Class clazz = Class.forName("com.feng.reflect.Person");Constructor c = clazz.getDeclaredConstructor(List.class);c.setAccessible(true);//暴力反射,,,,需注意!!Person p = (Person) c.newInstance(new ArrayList());System.out.println(p.name);}//创建对象的另一种途径@Testpublic void test5() throws Exception{Class clazz = Class.forName("com.feng.reflect.Person");Person  p = (Person)clazz.newInstance();//其实原理就是反射出这个类的无参构造函数进行构造,//这就是为什么当你创建了有参构造函数后,一定要创建一个无参的构造函数System.out.println(p.name);}}


原创粉丝点击